:: DEVELOPER ZONE
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.7.1.1, « Les listes de diffusion de MySQL ».
© 1995-2005 MySQL AB. All rights reserved.
