Requette SQL sur 3 tables

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 : Requette SQL sur 3 tables

par raptor » 13 juil. 2005, 14:22

Dans son cas, la profondeur est connue, et limitée a 3.

je pense qu'il peut eventuellement essayer de passer par des variables dynamiques et des tableaux.

par Invité » 11 juil. 2005, 20:48

Salut,
PS : Quand je donne une formation pour expliquer ces limites il me faut 30 mn. Je suis pas suffisament motivé pour t'écrire le pourquoi du comment.
OK, merci pour ta réponse qui me suffit. Et de toute façon je ne voyais pas par quel miracle je pouvais faire autrement de façon simple.

par Augure » 11 juil. 2005, 18:15

Salut,

le SQL est un langage ensembliste. Il est trés puissant pour manipuler des ensemble de données homogéne. Cependant il posséde des points faibles :
=> requête itérative de pronfondeur inconnue.
=> requête de reporting complexe : C'est pil poil ton cas ici. Le plus simple est donc de garder ta solution PHP qui est la plus simple.

(Il existe une solution en passant par de table temporaire avec un curseur ... mais ta solution sera plus simple, donc garde la)

PS : Quand je donne une formation pour expliquer ces limites il me faut 30 mn. Je suis pas suffisament motivé pour t'écrire le pourquoi du comment.

par NoOneII » 10 juil. 2005, 18:40

Voilà le code complet de la création de mon menu que je voudrais remplacer par une seul ligne de requette si la chose est possible
<?php
include ("connexion.php");

$query="SELECT idcat,nomcat FROM categorie ORDER BY nomcat";
$result=MYSQL_QUERY($query);

while($row=MYSQL_FETCH_ARRAY($result))
{
   echo $row['nomcat']."<br>";

   $query2="SELECT idscat,liencat,nomscat FROM scategorie WHERE liencat=".$row['idcat']." ORDER BY nomscat";
   $result2=MYSQL_QUERY($query2);
   while($row2=MYSQL_FETCH_ARRAY($result2))
   {
      echo "--".$row2['nomscat']."<br>";
      $query3="SELECT idsscat,lienscat,nomsscat FROM sscategorie WHERE lienscat=".$row2['idscat']." ORDER BY nomsscat";
	  $result3=MYSQL_QUERY($query3);
	  while($row3=MYSQL_FETCH_ARRAY($result3))
	  {
	  echo "-----".$row3['nomsscat']."<br>";
	  }
	}
}
MYSQL_CLOSE();
?>
le résultat donne :

CATEGORIE
--SOUS CATEGORIE
----SOUS SOUS CATEGORIE
CATEGORIE
--SOUSCATEGORIE
----SOUS SOUS CATEGORIE
----SOUS SOUS CATEGORIE
etc.....

par pjl » 09 juil. 2005, 20:34

il faut simplement faire une jointure.

http://www.commentcamarche.net/sql/sqljoint.php3

par Cyrano » 09 juil. 2005, 15:04

Dans un premier temps, ce n'est pas SELECT ... INTO, mais SELECT ... FROM

Ensuite effectivement, tu peux simplifier:

Code : Tout sélectionner

SELECT ... FROM cetagorie, scategorie, sscategorie WHERE lienscat = idscat AND liencat = idcat;
Mais il manque les champs dans ton select. Précise ce que tu veux obtenir.

Requette SQL sur 3 tables

par NoOneII » 09 juil. 2005, 14:57

Bonjour,

J'ai les 3 tables suivantes :

TABLE categorie
idcat mediumint(9) auto_increment
nomcat varchar(20)

TABLE scategorie
idscat mediumint(9) auto_increment
liencat mediumint(9)
nomscat varchar(100)

TABLE sscategorie
idsscat mediumint(9) auto_increment
lienscat mediumint(9)
nomsscat varchar(100)

qui me permettent de stocker un menu avec catégorie, sous catégorie et sous-sous catégorie

Quand j'affiche mon menu je faire 3 requettes du type
$query="SELECT .... INTO categorie";
while()
{
$query="SELECT .... INTO scategorie WHERE liencat=idcat";
        while()
        {
        $query="SELECT .... INTO sscategorie WHERE lienscat=idscat";
        }
}
Je suppose qu'il est possible de simplifer mon usine à Gaz, voir même de faire une seul requette ? mais je ne vois pas comment.
Pourriez vous m'aider
Merci d'avance.