[php mysql] recherche dans une db sur différentes tables...

recherche dans une db sur différentes tables... [php mysql] - Programmation

Marsh Posté le 04-10-2001 à 12:02:02    

voici les tables de mon forum :  
 
TABLE messages (
  Idm bigint(6) NOT NULL auto_increment,
  Date varchar(30) NOT NULL default '',
  Pseudo varchar(40) NOT NULL default '',
  Email varchar(50) NOT NULL default '',
  Texte longtext NOT NULL,
  Idr smallint(2) NOT NULL default '0',
  Ids mediumint(4) NOT NULL default '0',
  Icone varchar(4) NOT NULL default '',
  PRIMARY KEY  (Idm),
  KEY Idm (Idm)
)
 
TABLE rubriques (
  Idr smallint(2) NOT NULL auto_increment,
  Rubrique varchar(30) NOT NULL default '',
  Description mediumtext NOT NULL,
  PRIMARY KEY  (Idr),
  KEY Idr (Idr)
)
 
TABLE sujets (
  Ids mediumint(4) NOT NULL auto_increment,
  Date varchar(30) NOT NULL default '',
  Pseudo varchar(40) NOT NULL default '',
  Email varchar(50) NOT NULL default '',
  Sujet varchar(60) NOT NULL default '',
  Idr smallint(2) NOT NULL default '0',
  Vues mediumint(4) NOT NULL default '0',
  Last_update varchar(30) NOT NULL default '',
  PRIMARY KEY  (Ids),
  KEY ids (Ids)
)

 
la recherche d'un mot parmis les sujets fonctionne :  
 
$query="select ids, date, pseudo, email, sujet, vues, idr from sujets where sujet like '%$chaine%' order by last_update desc";
 
mais je voudraus faire une recherche parmis les messages et aprés afficher le résultat en listant les sujets dont les messages contiennent le mot recherché.
 
[i]$query="select s.ids, s.date, s.pseudo, s.email, s.sujet, s.vues, s.idr, m.ids from messages m, sujets s where m.texte like '%$chaine%' group by s.ids having s.ids=m.ids order by s.last_update desc";
 
ne fonctionne pas et d'une façon générale, même en ayant 2 bouquins sous les yeux, je n'arrive pas à faire cette recherche sur deux tables !
 
est ce que quelqu'un pourrait m'expliquer comment je doit m'y prendre ?

Reply

Marsh Posté le 04-10-2001 à 12:02:02   

Reply

Marsh Posté le 04-10-2001 à 12:27:24    

c'est dur et j'ai essayé plein de truc différents mais ça marche pas :cry::cry::cry::cry:

Reply

Marsh Posté le 04-10-2001 à 12:31:34    

Pour mon forum j'ai fé comme ca, c'est pas tres propres mais ca marche : jespere que ca va t'aider :
 
if ($par=="" )
{
$mot="%";
$mot.="$search";
$mot.="%";
$query="SELECT * FROM messages WHERE $choix LIKE '$mot'";
}
else
$query="SELECT * FROM messages WHERE auteur LIKE '$par'";
 
 
@mysql_connect($host,$login,$pass) or die ("Impossible de se connecter à la base de données" );
@mysql_select_db("$db" ) or die ("Base de données $dn inéxistante" );
 
$resultat=@mysql_query($query) or die ("Impossible d'effectuer la requette" );
echo("<table cellSpacing=0 width='100%' border='1' borderColorDark='#ffffff' borderColorLight='#c0c0c0' cellpadding='2' bgcolor='#E0E0E0'>" );
$nb=mysql_num_rows($resultat);
echo("<font face 'Arial' size='2'><b>$nb reponse(s) trouvées</b></font><br><br>" );
while ($row=mysql_fetch_array($resultat))
{
echo("<tr>
      <td width='3%'><center><IMG SRC='smileys/$row[pict].gif'></center></td>
      <td width='56%' bgcolor='#FFFFFF'><font size='2' face='Arial, Helvetica, sans-serif'><A HREF='view_messages.php?reponse=$row[id]'>$row[subject]</A></font></td>
 
      <td width='14%'><div align='center'><font size='1' face='Arial, Helvetica, sans-serif'>$row[date]<br><b>$row[auteur]</b></font></div></td>
      <td width='7%' bgcolor='#FFFFFF'><div align='center'><font face='Arial, Helvetica, sans-serif' size='1'>$row[views]</font</div></td>
      <td width='7%' bgcolor='#FFFFFF'><div align='center'><font face='rial, Helvetica, sans-serif' size='1'>$row[replies]</font</div></td>
      <td width='13%'><div align='center'><font face='Arial, Helvetica, sans-serif' size='1'>$row[lastdate]<br><b>$row[lastauteur]</b></font></div>" );
}
echo("</table>" );
mysql_close();

Reply

Marsh Posté le 04-10-2001 à 19:42:33    

ok, mais c'est quoi tes tables ???
 
tu as l'air d'avoir une seule table message ?
 
sinon, est ce quelqu'un pourrait au moins me donner une piste, un indice, bref un petit truc !
 
svp

Reply

Marsh Posté le 05-10-2001 à 01:05:14    

ok, ça marche en faisant ça :  
 
select s.ids, s.date, s.pseudo, s.email, s.sujet, s.vues, s.idr, count(s.ids) as nombre from sujets as s, messages as m  where m.texte like '%$chaine%' and s.ids=m.ids group by ids order by last_update desc

Reply

Marsh Posté le 05-10-2001 à 09:23:58    

Salut !
Mettons un peu d'ordre ds tes requêtes.
La req qui tourne :

Code :
  1. select
  2.   ids, date
  3. , pseudo
  4. , email
  5. , sujet
  6. , vues
  7. , idr
  8. from
  9.   sujets
  10. where sujet like '%$chaine%'
  11. order by last_update desc";


Celle qui tourne pas :

Code :
  1. select
  2.   s.ids
  3. , s.date
  4. , s.pseudo
  5. , s.email
  6. , s.sujet
  7. , s.vues
  8. , s.idr
  9. , m.ids
  10. from
  11.   messages m
  12. , sujets   s
  13. where m.texte like '%$chaine%'
  14. group by s.ids
  15. having s.ids=m.ids
  16. order by s.last_update desc


T'as pas besoin de clause having contenant une jointure :??:  
tu fais

Code :
  1. where m.texte like '%$chaine%'
  2.   and s.ids = m.ids
  3. group by s.ids
  4. order by s.last_update desc


tu elèves le having inutile, & ça va tourner.


---------------
di. / www.diredaredare.org - Ailes de la ville
Reply

Marsh Posté le 05-10-2001 à 15:45:11    

merci !
 
ça marche avec la requéte indiquée dans le poste d'avant !
 
il va falloir que j'étudie les fonctions de joiture de tables....ça peut servir dans certains cas ...

Reply

Sujets relatifs:

Leave a Replay

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