:: DEVELOPER ZONE
Wenn Sie eine komplizierte Anfrage haben, die viele Tabellen hat und keine Zeilen zurückgibt, sollten Sie folgende Prozedur benutzen, um herauszufinden, was bei Ihrer Anfrage falsch ist:
Testen Sie die Anfrage mit EXPLAIN und prüfen Sie, ob Sie etwas
finden können, das offensichtlich falsch ist. See Abschnitt 6.2.1, „EXPLAIN-Syntax (Informationen über ein SELECT erhalten)“.
Wählen Sie in der WHERE-Klausel nur die Felder aus, die benutzt
werden.
Entfernen Sie nacheinander Tabelle für Tabelle aus der Anfrage, bis sie
Zeilen zurückgibt. Wenn die Tabellen Groß sind, ist es eine gute Idee,
LIMIT 10 bei der Anfrage zu benutzen.
Machen Sie ein SELECT für die Spalte, die mit einer Zeile hätte
übereinstimmen sollen, gegen die Tabelle, die als letzte aus der Anfrage
entfernt wurde.
Wenn Sie FLOAT- oder DOUBLE-Spalten mit Zahlen vergleichen,
die Dezimalstellen haben, können Sie nicht = benutzen! Das Problem
tritt in den meisten Computersprachen auf, weil Fließkommawerte keine
exakten Werte sind:
mysql> SELECT * FROM tabelle WHERE float_spalte=3.5; mysql> SELECT * FROM tabelle WHERE float_spalte between 3.45 und 3.55;
In den meisten Fällen kann dies durch Umwandlung von FLOAT in
DOUBLE behoben werden!
Wenn Sie immer noch nicht herausfinden können, was schief geht, erzeugen
Sie einen minimalen Test, der mit mysql test < anfrage.sql laufen
gelassen werden kann, um Ihre Probleme aufzuzeigen. Sie können eine
Testdatei mit mysqldump --quick datenbanktabellen > anfrage.sql
erzeugen. Öffnen Sie die Datei in einem Editor, entfernen Sie ein paar
Einfügezeilen (wenn es davon zu viele gibt) und fügen Sie Ihr
SELECT--Statement am Ende der Datei an.
Testen Sie, ob es hiermit immer noch das Problem gibt:
shell> mysqladmin create test2 shell> mysql test2 < anfrage.sql
Schicken Sie die Testdatei mittels mysqlbug an
<mysql@lists.mysql.com>.
© 1995-2005 MySQL AB. All rights reserved.
