Si vous avez une requête complexe avec beaucoup de tables et qu'elle ne retourne aucun résultat, vous devez suivre la procédure suivante pour trouver ce qui cloche dans votre requête :
Testez la requête avec EXPLAIN
et
vérifiez si vous trouvez quelque chose qui vous parait
fausse. See Section 7.2.1, « Syntaxe de EXPLAIN
(Obtenir des informations sur les
SELECT
) ».
Ne sélectionnez que les champs que vous utilisez dans la
clause WHERE
:
Enlevez une table à la fois de la requête jusqu'à ce
qu'elle retourne quelques lignes. Si les tables sont
grandes, il est bon d'utiliser LIMIT 10
dans la requête.
Exécutez un SELECT
pour les colonnes qui
auraient du trouver des lignes dans la dernière table
supprimée de la requête.
Si vous comparez des colonnes FLOAT
ou
DOUBLE
avec des nombres à virgule, vous
ne pouvez pas utiliser '='
. C'est un
problème commun à la plupart des langages de programmation
car les valeurs à virgules flottantes ne sont pas des
valeurs exactes. Dans le plupart des cas, changer la
colonnes FLOAT
en
DOUBLE
corrigera cela. See
Section A.5.8, « Problèmes de comparaisons avec nombres à virgule flottante ».
si vous ne pouvez toujours pas trouver ce qui ne va pas,
créez un test minimal pouvant être exécuté avec
mysql test < query.sql
montrant votre
problème. Vous pouvez créer un fichier de test avec
mysqldump --quick base tables >
query.sql
. Editez le fichier et supprimez quelques
lignes d'insertions (s'il y en a trop), et ajoutez votre
requête de sélection à la fin du fichier.
Vérifiez que vous avez encore le problème en faisant :
shell>mysqladmin create test2
shell>mysql test2 < query.sql
Envoyez le fichier de test, en utilisant
mysqlbug
, à sur les listes diffusion.
See Section 1.4.1.1, « Les listes de diffusion de MySQL ».
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.