Requete croisée impossible

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Requete croisée impossible

par DoubleClic » 14 mai 2007, 12:08

Merci pour ces précisions.

En effet je réfléchis à créer une table de lisaison entre les deux tables.

Merci

par iclo » 14 mai 2007, 10:23

Sans vouloir être méchant, je dirais quand même que le design de la base de donnée pourrait être amélioré en la normalisant, ce qui permettrait de réduire le nombre de requêttes lancées sur le serveur.
Il n'est pas du tout optimal, d'avoir des listes de valeur dans un champs, il faudrait ajouter une table pour stocker ces différentes valeurs, avec un champ faisant le lien avec l'autre table.


Table A id(la table que tu as qui pour le moment contient la liste d'attribut)
Table B id IdTableA.

Ainsi un enregistrement de la table A peut contenir 0,1 ou plusieurs id dans la table B.

Ca permettra surement de faire ce que tu veux en une seule requête. (Très appréciable, si tu as beaucoup d'enregistrement ou que le script est utilisé souvent)

par Invité » 14 mai 2007, 08:28

Voici la réponse, ça peut toujours servir.

Code : Tout sélectionner

$req1=mysql_db_query($db,"SELECT liste FROM table1 WHERE id1='$_GET[id1]'"); $res1=mysql_fetch_assoc($req1); $resultat1=str_replace("|", ",", $res1['liste']); $req2=mysql_db_query($db,"SELECT id2,nom FROM table2 WHERE id2 NOT IN ('$resultat1')"); while($res2=mysql_fetch_assoc($req2)) {echo $res2[nom];}
Merci de votre aide.

Requete croisée impossible

par DoubleClic » 14 mai 2007, 08:10

Les résultats de la requete1 peuvent être différent alors que les id de la table b sont des numéros autoincrémentés donc connus mais ça change à chaque fois que j'ajoute un enregistrement.

Pour la sous requete where je n'arrive pas à la faire car pour extraire le résultat1 il faut déjà passer par une boucle for et je ne peux pas faire une autre boucle à l'intérieur sinon les résultats se multiplient.

Merci

par Xenon_54 » 14 mai 2007, 05:21

Bonjour,

Est-ce que les ID de la table "B" sont déjà connus et immuables?
Si oui, tu pourrais alors utiliser le type ENUM() et ensuite effectuer une sous-requête avec ta condition de sélection WHERE.

Si le nombre d'ID n'est pas connu et est variable, il faudrait alors créer une 3e table contenant les ID contenues dans la liste de chaque enregistrement de ta table A. Les sous-requêtes peuvent donc encore être utilisée pour la sélection finale.

Requete croisée impossible

par DoubleClic » 14 mai 2007, 00:32

Bonsoir à tous,

J'ai problème insoluble pour mon petit niveau.
Je m'explique, j'ai une table avec un champ qui contient des id séparés par un caractère et une deuxième table avec des enregistrement qui ont un id commun à ceux du résultat de la première requète.
Ma recherche c'est de lister les résultats uniques

première requete
$req1=mysql_db_query($db,"SELECT liste FROM table1 WHERE id1='$_GET[id1]'");
$res1=mysql_fetch_assoc($req1);
$resultat1=explode('|', $res1['liste']);
J'obtiens bien la liste des id
Ensuite je souhaite dans une autre table trouver les id différent du premier résultat.
$req2=mysql_db_query($db,"SELECT id2,nom FROM table2 WHERE NOT IN $resultat1");
while($res2=mysql_fetch_assoc($req2))
{echo $id";}
La deuxieme requete n'est pas bonne mais c'est pour vous montrer ou je veux en venir.

J'espère avoir été assez clair pour que vous compreniez.

Merci d'avance à ceux qui répondront.

Patrick