2011-01-14 11 views
0

stats und members Tabelle hat Index auf id. Aber wenn ich Abfrage ausführen überprüft es alle Zeilen in stats Tabelle (in members Tabelle dauert es nur eine). Irgendwelche Ideen, was ich falsch mache? Vielen Dank.Wie optimiert man diese Abfrage mehr?

Antwort

3

Korrekte ANSI-92-Syntax join - Kriterien in der Klausel ON angegeben wird:

SELECT mem.name, 
     mem.regdate, 
     stat.level 
    FROM stats AS stat 
    JOIN members AS mem ON mem.id = stat.id 
WHERE mem.ref = {$members['id']} 

Ohne die Kriterien JOIN, MySQL wird ein kartesisches Produkt zurückgeben und dann gilt die WHERE-Klausel zu diesen Ergebnissen. So ziemlich jede andere Datenbank würde Ihnen sagen, dass Sie einen Syntaxfehler für die von Ihnen gestellte Anfrage haben.

Auch das Schlüsselwort INNER ist optional.

+0

Das passiert, wenn Sie nicht ein paar Wochen programmieren ... Danke –

+0

Es überprüft immer noch alle 'stats' Reihen, was es sein könnte? –

+0

@hey: Die ID-Spalte ist der Primärschlüssel für die jeweilige Tabelle, oder? Die CREATE TABLE-Anweisungen und die EXPLAIN PLAN-Ausgabe würden helfen. –

0

Versuchen Sie, aus der Haupttabelle (in diesem Fall Mitglieder, ich glaube) und JOIN mit Statistiken für zusätzliche Informationen. Verwenden Sie ON, um zu definieren, wie Statistiken mit Mitgliedern verbunden sind, und verwenden Sie WHERE, um die Ergebnisse aus der Mitgliedstabelle zu begrenzen.

SELECT mem.name, mem.regdate, stat.level 
FROM members AS mem 
INNER JOIN stats AS stat 
    ON stat.id = mem.id 
WHERE mem.ref = {$members['id']}

Da es eine INNER JOIN Sie es drehen können auch um (von Statistiken Auswahl Beitritt auf Mitglieder), aber das macht wahrscheinlich mehr Sinn gegeben Sie zu einem bestimmten Mitglied suchen.

Verwandte Themen