Resultats incoherent lors d'une reque sql

Resultats incoherent lors d'une reque sql - SQL/NoSQL - Programmation

Marsh Posté le 22-06-2012 à 14:18:51    

Bonjour a tous.
 
Je suis un grand debutant en ce qui concerne php et en particulier sql.
Pour mon taf je suis en charge de creer une interface web pour la consultation de deux bases de donnees.  
J ai realiser sans trop de probleme l'acces a la premiere base de donnees.  
Voici le type d interface que j'ai :
http://s14.postimage.org/6vg21f74t/Screen_shot_2012_06_22_at_13_59_39.jpg
 
Jusque la pas de probleme. Toutes les requettes aboutissent au bons resultats.  
Voici un exemple de requette :

Code :
  1. The request was : select * from flydb where genotype LIKE '%dpp%' && genotype LIKE '%%' && genotype LIKE '%%' && Category LIKE '%' && Number LIKE '%'


 
 
 Du coup pour le deuxieme site je reprends le code du premier et adapte l'interface et la base de donnee.
http://s17.postimage.org/5d0p2zx7v/Screen_shot_2012_06_22_at_14_05_08.jpg
Mais la les requetes ne me donnent soit aucun resultat soit un resultat partiel. Mais de facon constante.
Par exemple dans la categorie "dev" dans ma base de donnee j'ai 68 entree correspondant a "rabbit" mais il ne m'en trouve systematiquement que 4.

Code :
  1. The request was : select * from ab where Antigen LIKE '%%' && dev LIKE '%Rabbit%' && label LIKE '%%' && Name LIKE '%'


 
 
Pour d'autre encore il ne me trouve rien.
Je pense a un probleme de syntaxe mais pas forcement. Quelqu'un a une suggestion ?
 


---------------
PSN : Luluberlu
Reply

Marsh Posté le 22-06-2012 à 14:18:51   

Reply

Marsh Posté le 22-06-2012 à 14:24:09    

Un autre probleme  que je viens de remarquer, dans phpmyadmin la requette :

Code :
  1. SELECT * FROM `ab` WHERE `dev` like 'rabbit'

ne me revoie que 67 resultats et pas 68. Je ne comprends pas viens le probleme.


---------------
PSN : Luluberlu
Reply

Marsh Posté le 22-06-2012 à 14:25:27    

bonjour !
 
Alors déjà enlève tout ce qui est de la forme "colonne LIKE '%%'".
ça ne sert pas et en plus, c'est du traitement inutile.
 
En SQL, "Rabbit" != "rabbit" il me semble que la casse est respectée. As-tu bien fait attention à ça?

Reply

Marsh Posté le 22-06-2012 à 14:43:26    

Merci pour la reponse, mais j ai teste et je n ai pas de sensibilite a la casse.
 
Ensuite les "Like" servent pour les requetes avec criteres vides. Lorsqu il  y a rien ils ne sont pas consideres, mais lorsqu ils sont renseigner ca permet de faire un recherche plus precise.  
exemple :  

Code :
  1. The request was : select * from flydb where genotype LIKE '%gal4%' && genotype LIKE '%gfp%' && genotype LIKE '%%' && Category LIKE '%Mosaic' && Number LIKE '%'

me donne 9 resultats comportant tous  les mots gfp, gal4 dans la categorie mosaic.
Alors  que la requete :

Code :
  1. The request was : select * from flydb where genotype LIKE '%%' && genotype LIKE '%%' && genotype LIKE '%%' && Category LIKE '%Mosaic' && Number LIKE '%'


me donne tous les resultats (209) de la categorie mosaic.
 
Ce que je ne comprend pas c'est que ca marche tres bien dans un cas et pas dans l'autre. C'est super frustran :cry:   :D .


Message édité par VSV-M le 22-06-2012 à 14:43:43

---------------
PSN : Luluberlu
Reply

Marsh Posté le 22-06-2012 à 15:42:04    

Il ne sont pas considéré mais ils sont lus et testés. Donc perte de ressources (même si c'est infime), et en plus il me font mal aux yeux :D
 
genotype LIKE '%%' && genotype LIKE '%%' && genotype LIKE '%%'
 
3 fois la même chose pour rien ici. enlève les, c'est toujours mieux pour les gens qui te relisent.
 
Bref, essaie ça:
 
select * from ab where dev LIKE 'Rabbit'

Reply

Marsh Posté le 22-06-2012 à 16:08:59    

Pour le rabbit manquant c'etait a cause d un espace a la fin d' une des occurences.
 
Pour les 3 genotype je les ai mis car comme veux avoir 3 champs de recherches differents dans la categorie genotype je penssai qu'a partir des 3 champs de recherches libre ils me fallait "additionnner" le resultat de chacun des trois termes.
Plus precisement en php ca donne ca :

Code :
  1. $requete= "select * from flydb where genotype LIKE '%$search_word%'
  2. &&  genotype LIKE '%$search_word2%'
  3. && genotype LIKE '%$search_word3%'
  4. && Category LIKE '%$search_cat'
  5. && Number LIKE '%$search_number' "


 
Pour ce qui est du probleme de fond
 

Code :
  1. The request was : select * from ab where Antigen LIKE '%%' && dev LIKE '%Rabbit%' && label LIKE '%%' && Name LIKE '%'


ne me donne toujours que 4 resultats alors que ce que tu me propose m'en donne 68...
C'est comme si la requete ne prenais pas en comptes les champs vide.
 
 
La base de donnee est un import d'un fichier excel. Le probleme pourrait il venir de la ?
 
 
Merci pour ton aide  :jap: Et desole pour les yeux  :D


Message édité par VSV-M le 22-06-2012 à 16:09:44

---------------
PSN : Luluberlu
Reply

Marsh Posté le 22-06-2012 à 16:11:35    

Pour info voila la structure de la table :
http://s16.postimage.org/x8snbvgsx/Screen_shot_2012_06_22_at_16_09_42.jpg


---------------
PSN : Luluberlu
Reply

Marsh Posté le 22-06-2012 à 16:24:15    

Ha ba tu as trouvé la réponse tout seul mais tu ne l'as pas vu ^^

 

En faite les LIKE '%' ne prend pas les champs vides.

 

Je te conseille de faire des tests pour savoir quels champs l'utilisateur a rempli dans le formulaire et d'adapter ta requête sql par la suite.

 

EDIT: enfaite je corrige, il prend les champs vides, mais pas les champs nuls. C'est plus exacte comme ça !


Message édité par likesum41 le 22-06-2012 à 16:27:49
Reply

Marsh Posté le 22-06-2012 à 16:30:06    

C est ce que je viens de voir....
 
Tout les champs n etaient pas renseignes , et par defaut etaient null.
Du coup en mettant none a la place de null ca marche...Et comme dans le premier site aucun champs n etait vide je n avais pas ce probleme.
 
 
 
Merci pour ton aide  :jap:


---------------
PSN : Luluberlu
Reply

Marsh Posté le 25-06-2012 à 14:34:45    

le ET en SQL, c'est normalement AND et pas &&...
 
Pour le case sensitive, ça dépend de la collation utilisée sur le champ ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed