moteur de rcherche php: comment sélectionner 3 tables?

moteur de rcherche php: comment sélectionner 3 tables? - PHP - Programmation

Marsh Posté le 26-05-2010 à 23:59:31    

salut j'ai fais un moteur de recherche interne pour mon site web, j'ai trouvé un script qui fonctionne bien mais je veux sélectionner 3tables au lieu d'une seule. j'ai éssayé mais je reçois tjrs un message(erreur de syntax) voila le code:  
 
<?  
if(isset($_POST['requete']) && $_POST['requete'] != NULL){  
mysql_connect('localhost','root','');  
mysql_select_db('parc');  
$requete = htmlspecialchars($_POST['requete']);  
$query = mysql_query("SELECT * FROM news WHERE nom LIKE '%$requete%' ORDER BY id DESC" ) or die (mysql_error());..............................................................................  
...........................................................  
 
 
voila je veuw ajouter 2 autres tables faune et flore:  
j'ai fait:  
SELECT * FROM news,faune,flore WHERE nom LIKE.....  
 
est ce que vous pouvez m'aider?

Reply

Marsh Posté le 26-05-2010 à 23:59:31   

Reply

Marsh Posté le 27-05-2010 à 09:43:30    

SELECT id,nom,'news' as type FROM news WHERE nom LIKE '%requete%' UNION
SELECT id,nom,'faune' as type FROM fauneWHERE nom LIKE '%requete%'
...

 

ce n'est pas htmlspecialchars qu'il faut utiliser mais mysql_real_escape_string
il vaut peut ter mieux utiliser MATCH AGAINST plutot que LIKE


Message édité par flo850 le 27-05-2010 à 09:44:27
Reply

Marsh Posté le 27-05-2010 à 12:51:09    

slt merci pour la réponse! pour le code ça ne m'a donné aucunne érreur de syntax mais il ne trouve aucune page!
les table sont trés différentes il ya que le champ nom et id qui existe ds les memes tables mais le nom n'est pas le meme!
comment faire?

Reply

Marsh Posté le 27-05-2010 à 16:21:02    

- refaire les choses un peu plus proprement en homogénéisant tout ça  
- lancer 3 recherches différentes dans tes 3 tables

Reply

Marsh Posté le 27-05-2010 à 16:42:02    

Comme l'a montré flo, le plus simple est de faire des UNION.
 
Mais dans entre les différents UNION, tous les champs retournés doivent être identiques (dans chaque requête UNION, tu dois avoir le même nombre de "colonnes", portant le même nom, et du même type).
 
Tu peux gérer cela sans trop de problème en utilisant des alias (AS)
 
donc
 

Code :
  1. SELECT id_faune AS id, nom_faune AS nom, NULL as attribut1, 'faune' as type_table from faune UNION
  2. SELECT id_news AS id, nom_news AS nom, date_news AS attribut1,  'news' as type_table from news UNION
  3. SELECT id_yyy AS id, nom_yyy AS id, NULL as attribut1, 'yyy' as type_table from yyy


 
Edit : si je ne dis pas d'âneries MATCH AGAINST est pas mal pour faire des recherches FULL TEXT, mais demande un index full text sur les champs sur lesquels tu veux faire des recherches, et ne fonctionne que sur du MyIsam.


Message édité par deliriumtremens le 27-05-2010 à 16:45:33
Reply

Sujets relatifs:

Leave a Replay

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