recherche dans une db sur différentes tables... [php mysql] - Programmation
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:
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();
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
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
Marsh Posté le 05-10-2001 à 09:23:58
Salut !
Mettons un peu d'ordre ds tes requêtes.
La req qui tourne :
Code :
|
Celle qui tourne pas :
Code :
|
T'as pas besoin de clause having contenant une jointure
tu fais
Code :
|
tu elèves le having inutile, & ça va tourner.
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 ...
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 ?