• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Datenbankabfrage mit JOINS

Status
Für weitere Antworten geschlossen.

FleyerShaver

Neues Mitglied
Folgendes habe ich in einem anderen Forum geschrieben. Dann hat mir jemand gesagt das ich das mit Joins machen muss, leider habe ich nicht mehr erfahren. Hier ist der Post:
favoriten.png

Also die Datenbanken sehen genau so aus:
gc_arcade_games:
lid | catid | title | icon | beschreibung
gc_arcade_favoriten:
id | gameid | userid
Es handelt sich um ein Favoritensystem. In der $userdata['user_id'] ist die id des Benuztzers das sich gerade eingeloggt hat. Nun klickt er auf Favoriten. Dann soll ein Favoritensystem aufgebaut werden, was ungefähr so wie auf dem Bild aussieht. wenn man auf cat 1 oder 2 usw. klickt kommt man zu meinefavoriten.php?catid=1 1 steht für die Kategorie die angeklickt wurde. So weit ist alles einfach zu programmieren. Nun möchte ich die Spiele die in der Kategorie vorhanden sind für die Kategorien errechnen und sie dann mit mysql_num_rows ausgeben. Wäre so wenn mir jemand dazu nur einen Query mit einer kleinen Beschreibung posten könnte.
 
Hallo,

generell kannst du zwei Tabellen in einem Query recht einfach miteinander Verbinden.

mysql_num_rows brauchste nicht unbedingt, geht auch mit COUNT und GROUP BY.

Code:
SELECT
   COUNT(g.lid) AS amount
FROM
   gc_arcade_games AS g,
   gc_arcade_favoriten AS f
WHERE
   g.lid=f.gameid AND f.userid='userid'
GROUP BY
   g.catid
In 'amount' steht dann die Anzahl je nach catid.
N43
 
Siehjt ja recht einfach aus. Nur das mit dem GROUP BY habe ich noch nicht so ganz verstanden. Wie müsste der Code jetzt aussehen, wenn ich alle Spiele zählen will, die in Kategorie 1 sind.
 
Hallo,

genau für das Zählen sorgt GROUP BY. Du wählst erst alle Favoriten aus. Einzeln genommen ergibt die Anzahl immer 1. Jetzt "gruppierst" du sie, also fasst alle Elemente aus der selben Kategorie zusammen und hast dann die Anzahl an Favoriten aus einer Kategorie.


N43
 
Sry aber das habe ich jetzt immer noch nicht verstanden. Kannst du mir ein kleines Beispiel machen, wie du die Anzahl der Games in Kategorie 1 ausliest. Es musst nachher nur stehen. Kategorie1(Anzahl Games)
 
Hallo,

der Code zählt die Anzahl Favoriten, die in jeder Kategorie sind. Probier's einfach mal aus. Wenn du noch nach der id von der Kategorie sortierst hast du auch eine sichere Zuordnung.

Du könntest ihn alternativ noch mit der Tabelle verbinden, in der die Kategorien stehen.
 
Ich habe den Query jetzt so umgefändert, das er das mit dem User machen soll, der die id 1 hat:
Code:
 SELECT COUNT( g.lid ) AS amount FROM gc_arcade_games AS g, gc_arcade_favoriten AS f WHERE g.lid = f.gameid AND f.userid =1 GROUP BY g.cid LIMIT 0 , 30
WEnn ich diesen Code jetzt in phpmyadmin einfüge steht da: amount 1 1 6 Was sagt mir das?
 
Hallo,

das ist die Anzahl der Favoriten je Kategorie. Du kannst jetzt noch die catid mit auslesen um sie dem Titel der Kategorie zuzuordnen.

Oder besser: Du bindest die Tabelle für die Kategorien noch mit ein und lässt direkt den passenden Titel zur Kategorie ausgeben.


N43
 
Hallo,

das ist die Anzahl der Favoriten je Kategorie. Du kannst jetzt noch die catid mit auslesen um sie dem Titel der Kategorie zuzuordnen.

Oder besser: Du bindest die Tabelle für die Kategorien noch mit ein und lässt direkt den passenden Titel zur Kategorie ausgeben.


N43

Und wie genau mach ich das dann. Soweit bin ich jetzt:
Code:
 SELECT    COUNT(g.lid) AS amount FROM    gc_arcade_games AS g,    gc_arcade_favoriten AS f    gc_arcade_cats AS c WHERE    g.lid=f.gameid AND f.userid='userid' GROUP BY    g.catid
Die gc_arcade_cats sieht so aus: CREATE TABLE `gc_arcade_cats` ( `cid` int(11) NOT NULL auto_increment, `title` varchar(50) NOT NULL default '', `description` text NOT NULL, `image` varchar(100) NOT NULL default '', `parentid` int(11) NOT NULL default '0', `status` enum('0','1','2') NOT NULL default '1', PRIMARY KEY (`cid`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=19 ; ES ist aber nur die cid und der title wichtig.
 
Hallo,

füg nach SELECT noch c.title AS title und im WHERE Abschnitt noch c.cid=g.catid AND.

Vor gc_arcade_cats fehlt bei dir noch ein Komma.

Allgemein wählst du einfach wie gewohnt aus, nur dass du noch den Präfix c. etc. und AS foo angibst und Tabellen übergreifend Bedingungen aufstellst.

N43
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben