Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2927 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  SELECT sur plusieurs tables

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

SELECT sur plusieurs tables

n°612929
freed102
Arayashiki
Posté le 15-01-2004 à 20:01:26  profilanswer
 

bon j'ai absolument besoin de faire une requete sur plusieurs tables à la fois avec un argument
j'ai fait ça :
 
SELECT * FROM bat1, devis1 WHERE bat1.id=devis1.id='$id_test' AND bat1.newold=devis1.newold='OLD'
 
ça m'affiche pas d'erreur.. mais visiblement... ça bugge !
 
j'arrive pas à trouver la syntaxe qu'il me faut pour pourvoir interroger à la fois "bat1" et "devis1" avec la même clef etrangère "id" et l'option "OLD"
 
can you help me ?

mood
Publicité
Posté le 15-01-2004 à 20:01:26  profilanswer
 

n°612936
naceroth
Posté le 15-01-2004 à 20:20:47  profilanswer
 

C'est quoi cette syntaxe bat1.id=devis1.id='$id_test' ????
 
Essaye une jointure plutôt, style

Code :
  1. select * from bat1
  2. left join devis1 on bat1.id = devis1.id and bat1.newold = devis1.newold
  3. where bat1.id = '$id_text' and bat1.newold = 'OLD'


 
ou
 

Code :
  1. select * from bat1
  2. left join devis1 using (id,newold)
  3. where bat1.id = '$id_text' and bat1.newold = 'OLD'


Message édité par naceroth le 15-01-2004 à 20:22:22
n°612942
freed102
Arayashiki
Posté le 15-01-2004 à 20:38:03  profilanswer
 

naceroth a écrit :

C'est quoi cette syntaxe bat1.id=devis1.id='$id_test' ????
 
Essaye une jointure plutôt, style

Code :
  1. select * from bat1
  2. left join devis1 on bat1.id = devis1.id and bat1.newold = devis1.newold
  3. where bat1.id = '$id_text' and bat1.newold = 'OLD'


 
ou
 

Code :
  1. select * from bat1
  2. left join devis1 using (id,newold)
  3. where bat1.id = '$id_text' and bat1.newold = 'OLD'




 
bah j'ai voulu m'inspirer d'un tutos qui me donnait une synthaxe comme ça :
 
SELECT * FROM table1,table2 WHERE table1.id = table2.id;
 
 
si je fais :
 
SELECT * FROM bat1,devis1 WHERE bat1.id='$id_test' = devis1.id='$id_test' AND bat1.newold=OLD = devis1.newold=OLD;
 
ça veut dire quelquechose ?

n°613010
mrbebert
Posté le 15-01-2004 à 22:11:06  profilanswer
 

non, tu peux pas cumuler les comparaisons entre 4 champs.
 
... WHERE bat1.id='$id_test' AND devis1.id='$id_test' AND bat1.newold='OLD' AND devis1.newold='OLD';

n°613155
naceroth
Posté le 16-01-2004 à 00:28:36  profilanswer
 

freed102 a écrit :


ça veut dire quelquechose ?


 
Non, une comparaison, c'est toujours entre 2 éléments.
 
Donc ... = ... and ... = ... etc :)
 
Après, faire des and à ralonge ou des jointures, c'est question de gouts et de circonstances :)

n°613610
freed102
Arayashiki
Posté le 16-01-2004 à 16:21:11  profilanswer
 

bah je comprends pas... mon truc ne sais pas compter !!!
 
avec mysql_num_rows il me repond des trucs incoherents... je m'explique.. j'ai deux tables, bat1 et devis1
et quand je demande les resultats de mes tables il me repond des trucs comme ça :
 
bat1  devis1  resultat
2   +   0    =   0
2   +   1    =   2
2   +   2    =   4
2   +   3    =   6
 
 
allez voir vous même !
 
http://www.clonecopy.net/php/membr [...] 225c172b2d
 
si la session est fermée :
login : xxx@xxx.com
pwd : xxx
 
puis aller dans l'espace membres
 
Faites joujou avec les suppressions de devis et commandes et bat... et vous verrez que le chiffre dans le menu de gauche "x elements historiques" ne veut rien dire !!!
 
pourtant.. ma requete est simple !
 
         

Code :
  1. $req = "SELECT * FROM bat1 , devis1 WHERE bat1.id='$id_test' AND devis1.id='$id_test' AND bat1.newold='OLD' AND devis1.newold='OLD'";
  2.          $result=MYSQL_QUERY($req) or die(mysql_error());
  3.          $total_old=mysql_num_rows($result);


Message édité par freed102 le 16-01-2004 à 16:33:53
n°613695
freed102
Arayashiki
Posté le 16-01-2004 à 17:33:48  profilanswer
 

Bon bah... tant pis !! je la fais à l'ancienne !!! au moins ça marche !!!
 
 
         

Code :
  1. $req = "SELECT * FROM bat1  WHERE id='$id_test' AND newold='OLD'";
  2.          $resultbat=MYSQL_QUERY($req) or die(mysql_error());
  3.          $total_oldbat=mysql_num_rows($resultbat);
  4.          $req = "SELECT * FROM devis1  WHERE id='$id_test' AND newold='OLD'";
  5.          $resultdevis=MYSQL_QUERY($req) or die(mysql_error());
  6.          $total_olddevis=mysql_num_rows($resultdevis);
  7.          $total_old=$total_olddevis+$total_oldbat;


 
là ya plus d'erreur !


Message édité par freed102 le 16-01-2004 à 17:34:08
n°613698
naceroth
Posté le 16-01-2004 à 17:48:02  profilanswer
 

Pourquoi demander à mysql de te renvoyer tous les champs si tu veux justes savoir le nombre de tupples du résultat ? Pourquoi ne pas simplement demander à mysql de la faire lui même, ce qui reduirait les risques de résultats ambigus du à une jointure *douteuse* ?
 
(voir instruction SUM et DISTINCT :))
 
//edit :
 
Le nombre de résultat de la requête  

Code :
  1. SELECT * FROM bat1 , devis1 WHERE bat1.id='$id_test' AND devis1.id='$id_test' AND bat1.newold='OLD' AND devis1.newold='OLD'


n'est pas incohérent, il est au contraire parfaitement logique :
 
bat1  devis1  resultat
2   +   0    =   0      aucun résultat pour devis 1, y en forcément pas non plus pour les deux requêtes mises en commun
2   +   1    =   2
2   +   2    =   4
2   +   3    =   6  
 
Les trois autres cas viennent du fait que tu mélanges 2 tables sans faire de jointures, tous les résultats de l'une sont multipliés par tous les résultats de l'autre (fait un select sans le where pour t'en convaincre, tu auras au total bat1*devis1 résultats :))


Message édité par naceroth le 16-01-2004 à 18:04:11

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  SELECT sur plusieurs tables

 

Sujets relatifs
fichier de données .ttx, comment mettre plusieurs valeurs?[Sql] Problème sur croisement de tables
[MFC] Tooltips sur plusieurs lignes...SQL Serveur 2000: Select avec concaténation !
While ... avec plusieurs requetes simultanées...[MFC] CTreeCtrl & Track Select (hot tracking)
servlet, afficher sur plusieurs pages le recordsetPlusieurs questions en Java
MyOleDb - SELECT MAX(id) FROM table ne fonctionne pas...Optimisation d'un remplissage de select! (PHP)
Plus de sujets relatifs à : SELECT sur plusieurs tables


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR