PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   MySQLi/PDO/(MySQL) (http://www.selfphp.de/forum/forumdisplay.php?f=22)
-   -   Hilfe bei einer Abfrage (http://www.selfphp.de/forum/showthread.php?t=23380)

memcpy 22.06.2010 01:25:41

Hilfe bei einer Abfrage
 
Hallo,
für ein Uniprojekt stehe ich vor folgendem Problem:
Es handelt sich hier allgemein um ein Ratingsystem für Inhalte, die verschiedene User hochladen können. Da wir anhand der IP doppeltes Voting von Inhalten unterbinden wollen, verwenden wir eine extra Tabelle ip.

Es sind 4 Tabellen vorhanden:

1. user mit den spalten u_id,u_name,etc.

2. content mit c_id, c_user_id,etc. . Die Spalte c_user_id soll dabei ein Fremdschlüssel auf user.u_id sein.

3. thumb mit thumb_id,thumb_content,thumb_ip,thumb_rating. dabei ist thumb_content ein fremdschlüssel auf content.c_id.

4. ip mit ip_id,ip_ip

Wenn ein User einen Vote abgibt, wird zunächst überprüft, ob seine IP bereits ein Vote für content x abgegeben hat. Falls nicht, wird falls seine IP noch nicht in der ip-Tabelle ist, wird sie hinzugefügt, eine Referenz zu dieser IP in thumb.thumb_ip erstellt und thumb.rating mit 1 oder -1 belegt (je nachdem ob User Content gut oder schlecht fand).

Nun kommt das Problem mit der Abfrage. Es soll die Summe von thumb_rating ermittelt werden, die er durch all seine contents erreicht hat.

Ich kam bis zu folgendem Statement:

SELECT SUM(thumb.thumb_rating) AS count,u_name FROM user
INNER JOIN content ON user.u_id = content.c_user_id
INNER JOIN thumb ON thumb.thumb_content = content.c_id
GROUP BY user.u_name
ORDER BY count desc;

Jedoch wird nur die Summe der thumb_rating Werte von einem Eintrag in der content-Tabelle errechnet. Wir müssen aber über alle content Einträge die Summe wissen.
Ist das überhaupt möglich oder ist meine DB-Design Müll ?

Hier nochmal zum selber probieren:

Hallo,
für ein Uniprojekt stehe ich vor folgendem Problem:
Es handelt sich hier allgemein um ein Ratingsystem für Inhalte, die verschiedene User hochladen können. Da wir anhand der IP doppeltes Voting von Inhalten unterbinden wollen, verwenden wir eine extra Tabelle ip.

Es sind 4 Tabellen vorhanden:

1. user mit den spalten u_id,u_name,etc.

2. content mit c_id, c_user_id,etc. . Die Spalte c_user_id soll dabei ein Fremdschlüssel auf user.u_id sein.

3. thumb mit thumb_id,thumb_content,thumb_ip,thumb_rating. dabei ist thumb_content ein fremdschlüssel auf content.c_id.

4. ip mit ip_id,ip_ip

Wenn ein User einen Vote abgibt, wird zunächst überprüft, ob seine IP bereits ein Vote für content x abgegeben hat. Falls nicht, wird falls seine IP noch nicht in der ip-Tabelle ist, wird sie hinzugefügt, eine Referenz zu dieser IP in thumb.thumb_ip erstellt und thumb.rating mit 1 oder -1 belegt (je nachdem ob User Content gut oder schlecht fand).

Nun kommt das Problem mit der Abfrage. Es soll die Summe von thumb_rating ermittelt werden, die er durch all seine contents erreicht hat.

Ich kam bis zu folgendem Statement:

SELECT SUM(thumb.thumb_rating) AS count,u_name FROM user
INNER JOIN content ON user.u_id = content.c_user_id
INNER JOIN thumb ON thumb.thumb_content = content.c_id
GROUP BY user.u_name
ORDER BY count desc;

Jedoch wird nur die Summe der thumb_rating Werte von einem Eintrag in der content-Tabelle errechnet. Wir müssen aber über alle content Einträge die Summe wissen.
Ist das überhaupt möglich oder ist meine DB-Design Müll ?

Hallo,
für ein Uniprojekt stehe ich vor folgendem Problem:
Es handelt sich hier allgemein um ein Ratingsystem für Inhalte, die verschiedene User hochladen können. Da wir anhand der IP doppeltes Voting von Inhalten unterbinden wollen, verwenden wir eine extra Tabelle ip.

Es sind 4 Tabellen vorhanden:

1. user mit den spalten u_id,u_name,etc.

2. content mit c_id, c_user_id,etc. . Die Spalte c_user_id soll dabei ein Fremdschlüssel auf user.u_id sein.

3. thumb mit thumb_id,thumb_content,thumb_ip,thumb_rating. dabei ist thumb_content ein fremdschlüssel auf content.c_id.

4. ip mit ip_id,ip_ip

Wenn ein User einen Vote abgibt, wird zunächst überprüft, ob seine IP bereits ein Vote für content x abgegeben hat. Falls nicht, wird falls seine IP noch nicht in der ip-Tabelle ist, wird sie hinzugefügt, eine Referenz zu dieser IP in thumb.thumb_ip erstellt und thumb.rating mit 1 oder -1 belegt (je nachdem ob User Content gut oder schlecht fand).

Nun kommt das Problem mit der Abfrage. Es soll die Summe von thumb_rating ermittelt werden, die er durch all seine contents erreicht hat.


Hier das der Aufbau der Tabellen:

CREATE TABLE `user` (
`u_id` int(11) NOT NULL AUTO_INCREMENT,
`u_name` char(16) NOT NULL DEFAULT '',
`u_pass` char(32) NOT NULL DEFAULT '',
`u_email` char(150) NOT NULL DEFAULT '',
`u_session` char(32) DEFAULT NULL,
`u_ip` char(32) DEFAULT NULL,
`u_active` tinyint(1) DEFAULT '0',
`u_regcode` int(8) DEFAULT '0',
`u_gender` int(3) DEFAULT '1',
`u_birtday` date DEFAULT NULL,
PRIMARY KEY (`u_id`),
UNIQUE KEY `NickName` (`u_name`),
UNIQUE KEY `UserMail` (`u_email`),
KEY `u_gender` (`u_gender`)
) ENGINE=MyISAM AUTO_INCREMENT=2147483648 DEFAULT CHARSET=latin1;


CREATE TABLE `content` (
`c_id` int(11) NOT NULL AUTO_INCREMENT,
`c_user_id` int(11) NOT NULL,
`c_title` char(40) NOT NULL DEFAULT '',
`c_description` char(200) NOT NULL DEFAULT '',
`c_path` char(200) NOT NULL DEFAULT '',
`c_thumbpath` char(200) NOT NULL DEFAULT '',
`c_date` datetime DEFAULT NULL,
`c_deleted` tinyint(1) DEFAULT '0',
`c_tags` int(11) DEFAULT NULL,
`c_views` int(11) DEFAULT '1',
`c_rating` int(11) DEFAULT '0',
`c_mediatype` int(11) NOT NULL,
PRIMARY KEY (`c_id`),
KEY `c_author` (`c_user_id`),
KEY `c_mediatype` (`c_mediatype`)
) ENGINE=MyISAM AUTO_INCREMENT=58 DEFAULT CHARSET=latin1;


CREATE TABLE `thumb` (
`thumb_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`thumb_content` int(10) unsigned NOT NULL,
`thumb_ip` int(10) unsigned NOT NULL,
`thumb_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`thumb_rating` tinyint(1) unsigned NOT NULL,
PRIMARY KEY (`thumb_id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;

CREATE TABLE `ip` (
`ip_id` int(11) NOT NULL AUTO_INCREMENT,
`ip_ip` char(15) NOT NULL,
PRIMARY KEY (`ip_id`),
UNIQUE KEY `ip_ip` (`ip_ip`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;


Ich kam bis zu folgendem Statement:

SELECT SUM(thumb.thumb_rating) AS count,u_name FROM user
INNER JOIN content ON user.u_id = content.c_user_id
INNER JOIN thumb ON thumb.thumb_content = content.c_id
GROUP BY user.u_name
ORDER BY count desc;

Jedoch wird nur die Summe der thumb_rating Werte von einem Eintrag in der content-Tabelle errechnet. Wir müssen aber über alle content Einträge die Summe wissen.
Ist das überhaupt möglich oder ist meine DB-Design Müll ?

vt1816 22.06.2010 07:47:58

AW: Hilfe bei einer Abfrage
 
Hallo und willkommen hier im Forum.

Dir ist aber schon bekannt, dass die IP-Adresse keine eindeutige Zuordnung zu einem User ist/ermöglicht (zum Beispiel AOL, etc.) - oder?

memcpy 22.06.2010 12:02:14

AW: Hilfe bei einer Abfrage
 
Zitat:

Zitat von vt1816 (Beitrag 137077)
Hallo und willkommen hier im Forum.

Dir ist aber schon bekannt, dass die IP-Adresse keine eindeutige Zuordnung zu einem User ist/ermöglicht (zum Beispiel AOL, etc.) - oder?

Das stimmt. Ich benötige aber die IP, um mehrfache Votes zu unterbinden, da auch anonyme User voten können.

vt1816 22.06.2010 14:00:39

AW: Hilfe bei einer Abfrage
 
Zitat:

Zitat von memcpy (Beitrag 137087)
Das stimmt. Ich benötige aber die IP, um mehrfache Votes zu unterbinden, da auch anonyme User voten können.

Damit verhinderst Du aber auch den Zugriff von Leuten die hinter einem Proxy leben (Großfirmen, Uni, etc.).

Denkmal drüber nach ...


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:19:40 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.