Page 1 sur 2
[Recherche] Comment faire en SQL
Posté : 18 mai 2006, 11:09
par agité
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 ?
Posté : 18 mai 2006, 11:31
par ouckileou
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
Posté : 18 mai 2006, 11:35
par agité
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.
Posté : 18 mai 2006, 11:42
par ouckileou
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.
Posté : 18 mai 2006, 11:52
par agité
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
Posté : 18 mai 2006, 12:00
par ouckileou
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 ?
Posté : 18 mai 2006, 12:04
par agité
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.
Posté : 18 mai 2006, 12:15
par agité
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>     <b><u>Rechercher dans la base de doné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>          Recherche sur la table des artistes :<?php echo $var2['nb'];?>
<br><br>          Recherche sur la table des mixs :<?php echo $var3['nb2'];?>
Posté : 18 mai 2006, 12:19
par ouckileou
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
Posté : 18 mai 2006, 12:29
par agité
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
Posté : 18 mai 2006, 12:33
par ouckileou
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
Posté : 18 mai 2006, 13:04
par agité
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>          Recherche sur la table des artistes :<?php echo $nb;?>
<br><br>          Recherche sur la table des mixs :<?php echo $nb2;?>
Posté : 18 mai 2006, 13:12
par agité
Je precise que dans phpmyadmin quand je retire le ".$_GET['word']" et ajoute un mot de recherche ca fonctionne sans soucis !
Posté : 18 mai 2006, 13:43
par xs_stef
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 ?
Posté : 18 mai 2006, 14:06
par ouckileou
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()