[Recherche] Comment faire en SQL

Mammouth du PHP | 965 Messages

18 mai 2006, 11:09

Je cherche a faire une partie "rechercher" j'ai d'abord essayer de mettre des requetes comme :
$sql2="SELECT COUNT(*) AS nb FROM `matable` WHERE nom LIKE '%' ";
Pour qu'il me recherche sur toute la table mais la je suis obligé de faire une recherche par nom et j'aimerais bien faire une recherche sur toutes les tables sans indiquations.

Comment fait on une recherche sur une base de donnée SQL comme sur un moteur de recherche ?

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

18 mai 2006, 11:31

C'est à toi de le coder, suivant tes besoins

Il n'y a rien qui permette de faire une recherche "sur toutes les tables", d'ailleurs est-ce que c'est vraiment utile ?

Tu dois proposer un formulaire, avec un mot à chercher, et éventuellement des options pour choisir la ou les tables dans lesquelles chercher

Et tu peux construire ta requête dynamiquement ensuite

Mammouth du PHP | 965 Messages

18 mai 2006, 11:35

Justement j'ai déjà fait le formulaire avec le mot a rentrer et l'affichage de la recherche sur une autre page.

Je n'ai pas besoin de mettre des options de recherche pour le moment etant donnée que ma base n'est pas enorme par contre j'aimerais bien faire l'affichage d'une table et de l'autre a côté.

Par exemple :

Code : Tout sélectionner

Resultat sur la base de donnée 1 : Resultat sur la base de donnée 2 :
Mais dans ce cas la je peux pas utiliser SELECT FROM non ? puisqu'il me demande de choisir sur la table un element.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

18 mai 2006, 11:42

Bon déjà il faudrait pas confondre "table" et "base de données" stp... ça sera plus clair pour tout le monde
Tu as a priori 1 base de données, qui contient plusieurs tables, et tu veux faire une recherche dans 2 tables, c'est ça ?

Et je ne comprend pas cette phrase :
Mais dans ce cas la je peux pas utiliser SELECT FROM non ? puisqu'il me demande de choisir sur la table un element.

Mammouth du PHP | 965 Messages

18 mai 2006, 11:52

Oui j'edit c'est bien une recherche sur 2 table de la même base de donnée desolé.

En fait la phrase que tu ne comprends c'etait pour dire que je ne vois pas quel requete utiliser pour faire une recherche sur toute les table ou alors sur une table mais avec tout les elements, sans choisir par exemple une colonne ou autre.

Recherche sur tout ce qu'il ya sur la table en fin de compte

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

18 mai 2006, 12:00

Bah je ne vois pas comment c'est possible, il y a un minimum de SQL à écrire... donc c'est toi d'écrire une requête qui va chercher dans toutes les colonnes :

Code : Tout sélectionner

SELECT * FROM table1 t1, table2 t2 WHERE t1.colA = 'mot_cle' OR t1.colB = 'mot_cle' OR t2.colA = 'mot_cle' OR t2.colB = 'mot_cle'
Mais c'est bizarre, as-tu réellement besoin de faire une recherche aussi large ?
Que contiennent ces tables et qu'est-ce que tu veux chercher ?

Mammouth du PHP | 965 Messages

18 mai 2006, 12:04

Une table avec les artistes et une table avec les musiques je veux que quand tu rentre un mot ca recherche dans les 2 table et retourne les reponses tout simplement je vais essayer avec ta methode.

Mammouth du PHP | 965 Messages

18 mai 2006, 12:15

J'ai essayer comme ca en mettant avec des joker ou le mot direct mais il ne me retourne jamais de reponse...

<td class="menu_index" width="15%" height="480" valign="top"><br>&nbsp &nbsp &nbsp<b><u>Rechercher dans la base de don&eacute;e :</u></b> <?php echo $word ; ?>

<?php

$sql="SELECT * FROM `art` As nb WHERE 	nom  = '".$_POST['word']."'
																									OR description  = '".$_POST['word']."'
																									OR email  = '".$_POST['word']."'
																									OR loc  = '".$_POST['word']."'
																									OR msn  = '".$_POST['word']."'
																									OR site  = '".$_POST['word']."' ";

$nb = mysql_query($sql) or die("erreur ! ".mysql_error());
$var2=mysql_fetch_array($nb);


$sq2="SELECT * FROM `mix` As nb2 WHERE 	artiste LIKE '%".$_POST['word']."%'
																										OR nom LIKE '%".$_POST['word']."%'
																										OR date LIKE '%".$_POST['word']."%'
																										OR genre LIKE '%".$_POST['word']."%'
																										OR description LIKE '%".$_POST['word']."%'
																										OR lien LIKE '%".$_POST['word']."%' ";

$nb2 = mysql_query($sql2) or die("erreur ! ".mysql_error());													$var3=mysql_fetch_array($nb2);
?>

<br><br>&nbsp &nbsp &nbsp &nbsp &nbsp Recherche sur la table des artistes :<?php echo $var2['nb'];?>
<br><br>&nbsp &nbsp &nbsp &nbsp &nbsp Recherche sur la table des mixs :<?php echo $var3['nb2'];?>

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

18 mai 2006, 12:19

Avant de tester avec un script PHP, tu prends phpMyAdmin et tu fais tes essais... ensuite quand ta requête sera bonne tu l'intégreras

Mammouth du PHP | 965 Messages

18 mai 2006, 12:29

ma requete :

Code : Tout sélectionner

SELECT * FROM art t1 WHERE t1.artiste = 'mot' OR t1.nom = 'mot'
marche très bien en SQL par contre en php :
		$sql="SELECT * FROM art t1 WHERE t1.nom  = '".$_POST['word']."'
																										OR t1.description  = '".$_POST['word']."'
																										OR t1.email  = '".$_POST['word']."'
																										OR t1.loc  = '".$_POST['word']."'
																										OR t1.msn  = '".$_POST['word']."'
																										OR t1.site  = '".$_POST['word']."' ";
																$nb = mysql_query($sql) or die("erreur ! ".mysql_error());
																$var2=mysql_fetch_array($nb);
Rien ne m'est retourner

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

18 mai 2006, 12:33

Quand une requête ne renvoie pas (ou ne fait pas) ce que l'on attend :
- faire afficher les erreurs MySQL (ou autre)
ex :
mysql_query($requete) or die (mysql_error());
- afficher le SQL généré (c'est ce code qui est important) :
echo $requête;
- regarder si rien ne cloche
- tester directement dans MySQL (ex : via phpMyAdmin) et ajuster

Mammouth du PHP | 965 Messages

18 mai 2006, 13:04

Recherche sur la table des artistes :Resource id #6

il m'indique Resource id #6 mais je pense qu'il ya une erreur on ne peut pas faire :
	<?php

																$sql="SELECT * FROM art t1 WHERE t1.nom  = '".$_POST['word']."'
																										OR t1.description  = '".$_POST['word']."'
																										OR t1.email  = '".$_POST['word']."'
																										OR t1.loc  = '".$_POST['word']."'
																										OR t1.msn  = '".$_POST['word']."'
																										OR t1.site  = '".$_POST['word']."' ";
																$nb = mysql_query($sql) or die("erreur ! ".mysql_error());



																$sq2="SELECT * FROM mix t2  WHERE artiste = '".$_POST['word']."'
																										OR t2.nom = '".$_POST['word']."'
																										OR t2.date = '".$_POST['word']."'
																										OR t2.genre = '".$_POST['word']."'
																										OR t2.description = '".$_POST['word']."'
																										OR t2.lien = '".$_POST['word']."' ";
																$nb2 = mysql_query($sql2) or die("erreur ! ".mysql_error());

																?>
															<br><br>&nbsp &nbsp &nbsp &nbsp &nbsp Recherche sur la table des artistes :<?php echo $nb;?>
															<br><br>&nbsp &nbsp &nbsp &nbsp &nbsp Recherche sur la table des mixs :<?php echo $nb2;?>

Mammouth du PHP | 965 Messages

18 mai 2006, 13:12

Je precise que dans phpmyadmin quand je retire le ".$_GET['word']" et ajoute un mot de recherche ca fonctionne sans soucis !

Eléphanteau du PHP | 38 Messages

18 mai 2006, 13:43

Salut,
au risque de dire une co******, ça ne gêne pas les espaces dans les noms de table, il ne faut pas les 'échapper' avec [] ou un truc dans le genre ?

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

18 mai 2006, 14:06

Je precise que dans phpmyadmin quand je retire le ".$_GET['word']" et ajoute un mot de recherche ca fonctionne sans soucis !
Tu mélanges tout, dans phpMyADmin, tu ne testes que du SQL, pas du PHP

S'il t'affiches Ressource #6, c'est normal, mysql_query() te renvoie un jeu de données que tu ne peux traiter directement

tu dois utiliser une fonction comme mysql_fetch_row() ou mysql_fetch_array()