Repetition des resultats

Invité
Invité n'ayant pas de compte PHPfrance

27 août 2008, 06:19

bonjour,

je fais une select des donnees de la base de donnee, et pour chaque affichage il me le repete 6 fois, est ce qu'il y a quelque chose qui fait ce truc la?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

27 août 2008, 08:40

est ce qu'il y a quelque chose qui fait ce truc la?
Surement ton code ;)

Mais pour pouvoir le confirmer, il faudrait que tu nous montres la récupération et l'affichage de tes données.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Invité
Invité n'ayant pas de compte PHPfrance

28 août 2008, 06:24

est ce qu'il y a quelque chose qui fait ce truc la?
Surement ton code ;)

Mais pour pouvoir le confirmer, il faudrait que tu nous montres la récupération et l'affichage de tes données.
J'ai mis 2 requetes:
select * from table where ...
=> cette requete marche bien
select * from table1, table2 where table1.id = $id
celle la donne une repetition des resultats 6 fois.

PS: Je recupere et affiche les resultats de la meme facon (1ere et 2eme requete)

Mammouth du PHP | 1353 Messages

28 août 2008, 10:20

Montre nous l ensemble du code stp : Requete + Récupération des données + affichage....
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

28 août 2008, 10:41

Pour t'aider on a besoin du code PHP, car c'est PHP qui envoie les requêtes SQL à la BDD. Attention à changer login et mot de passe avant de coller le code sur le forum.
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

28 août 2008, 10:57

select * from table1, table2 where table1.id = $id
Surement cette requête va répéter quelques enregistrements car en SQL, quand on met deux tables dans le FROM sans préciser leur relation le SELECT fait un graph des deux tables. C'est à dire que le résultat du SELECT contiendra le nombre d'enregistrements de la première table multiplié par le nombre d'enregistrements dans la deuxième table.

Exemple:
membre (id, nom) contient :
id, nom
1, toto
2, popo

peudo (id_membre, login) contient :
id_membre, login
1, login1
2, login2

La requête : "SELECT * FROM membre, pseudo" retourne :
membre.id, membre.nom, pseudo.id_membre, pseudo.login
1, toto, 1, login1
1, toto, 2, login2
2, popo, 1, login1
2, popo, 2, login2

Les enregistrements de la table membre se sont multipliés par le nombre d'enregistrements de la table pseudo et le résultat n'est pas correct. Car le login1 doit correspondre selon toute logique seulement au membre toto et de même pour login2 qui désigne seulement popo

Pour éviter cette incohérence, il faut ajouter dans la requête une déclaration de la relation entre les tables membre et pseudo qui s'exprime ainsi : membre.id = pseudo.id_membre

Voici le SELECT correct alors:
"SELECT * FROM membre JOIN pseudo ON membre.id = pseudo.id_membre"
Ce qui retourne :
membre.id, membre.nom, pseudo.id_membre, pseudo.login
1, toto, 1, login1
2, popo, 2, login2

Après cette précision fondamentale du modèle relationnel SQL, si l'on veut faire une sélection (filtrage) d'enregistrements par le SELECT on doit ajouter une clause WHERE.
Par exemple, si l'on veut simplement les données concernant toto, la requête devient :
"SELECT * FROM membre JOIN pseudo ON membre.id = pseudo.id_membre WHERE membre.id=1"
Ce qui retourne :
membre.id, membre.nom, pseudo.id_membre, pseudo.login
1, toto, 1, login1
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Invité
Invité n'ayant pas de compte PHPfrance

28 août 2008, 18:18

je l ai teste maintenant ca marche :)

y reste un petit truc, si je veux faire une recherche avec un des mots ou tous les mots (and / or), je dois preciser le type de recherche, j'ai mis cette requete ici:
	$sql = "SELECT * FROM table_1 JOIN table_2 ON table_1.id = table_2.id_t where $mot like '%$word%' OR mot like '%$word%' order by table_2.id ASC";
quelqu un va me poser pourquoi tu as mis une fois "$mot like $word" et une autre fois "mot like $word", normalement c'est "mot like $word", alors vous dis que si je mets pas le "$mot like $word" je ne vais pas trouver le resultat comme probleme deja pose ici

comment j ai obtenu $mot:

//charset
$Charset = 'utf8';

$string1 = "replace(mot,'ِ','')";
$string2 = "replace(". $string1 . ",'َ','')";
$string4 = "replace(". $string2 . ",'ً','')";
$string5 = "replace(". $string4 . ",'ُ','')";
$string6 = "replace(". $string5 . ",'ٌ','')";
$string7 = "replace(". $string6 . ",'ّ','')";
$string8 = "replace(". $string7 . ",'ٍ','')";
$string9 = "replace(". $string8 . ",'ْ','')";
$mot = $string9;
// connection à la DB
$link = mysql_connect ($host,$user,$pass);
// insetion des caracteres utf pour la langue arabe
mysql_query("SET NAMES $Charset;", $link) or die('Erreur: '.mysql_error());
// selection de la DB
mysql_select_db($db) or die ('Erreur: '.mysql_error());
ces lignes la:
$string2 = "replace(". $string1 . ",'َ','')";
sont les accents en arabe, ne sont pas reconnaissable par le MySQL