récupérer valeur d'un id externe...

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 : récupérer valeur d'un id externe...

par jojolapine » 12 janv. 2007, 15:23

oups ... :oops: j'ai remis une fois poubelle au lieu de mettre le test sur la salle... inattention quand tu nous tiens :wink:

par Ajoloca » 12 janv. 2007, 15:18

Re,

Tu n'écris pas du tout la même requête.
Dans la première tu utilises `id` = `dates`.`salle` que je ne vois nulle part das la seconde.

Ensuite dans la seconde tu utilises 2 fois d.poubelle = 'non'.

Je suppose que c'est une erreur de copier/coller.

par jojolapine » 12 janv. 2007, 15:10

bon alors en fait c'est plus résolu.... car j'ai le même type de requêtes plusieurs fois, mais avec des clauses where différentes et là ça marche plus...
en gros pour la première requête, j'avais ceci avec requête imbriqué:

Code : Tout sélectionner

SELECT `id` , `nom_groupe` , `date_concert` , ( SELECT `nom` FROM `utilisateurs` WHERE `id` = `dates`.`salle` ) AS nom FROM `dates` WHERE `poubelle` = 'non' ORDER BY `date_concert` DESC
que j'ai avec votre aide tranformé en ceci:

Code : Tout sélectionner

SELECT d.id, d.nom_groupe, d.date_concert, u.nom FROM dates d, utilisateurs u WHERE u.id = d.salle AND d.poubelle = 'non' ORDER BY d.date_concert DESC
ça fonctionne bien, maintenant, j'ai une requête qui ressemble à ceci:

Code : Tout sélectionner

SELECT `id` , `nom_groupe` , `date_concert` , ( SELECT `nom` FROM `utilisateurs` WHERE `id` = `dates`.`salle` ) AS nom FROM `dates` WHERE `poubelle` = 'non' AND `date_concert` LIKE '2007-01-13 %' ORDER BY `date_concert` DESC
c'est la même, en ayant simplement rajouter une vérification sur la date
(ceci dit en passant, y a t'il moyen de faire mieu, pour choisir les entrée dont le jour est égal à2007-01-13, sachant que jai un champ de type datetime)

et voici ce que j'ai fait comme jointure:

Code : Tout sélectionner

SELECT d.id, d.nom_groupe, d.date_concert, u.nom FROM dates d, utilisateurs u WHERE d.poubelle = 'non' AND d.date_concert LIKE '2007-01-13 %' AND d.poubelle='non' ORDER BY d.date_concert DESC
et bien ça ne marche pas, au lieu de ne récupérer seuelement les dates correspondantes, ça me récupère tout et me change (temporairement) toutes les dates à la valeur du datetime de l'élément qui "devrait" être sélectionné

par Ajoloca » 12 janv. 2007, 14:53

Bonjour,

Une jointure est toujours plus rapide qu'une sous requête.
Tout à fait, surtout qu'ici, on ne fait le lien qu'entre deux tables, quand ce sera avec 5 ou plus, les sous-requêttes imbriquées deviennent vite prises de tête.
Sans compter le nombre de tables temporaires générées ou alors le nombre d'index à créer que pour une requête.

En gros, si on peut éviter les requêtes imbriquées, on ne se portera que mieux.
Je dirai même que des fois il est plus intéressant de créer deux requêtes.

par iclo » 12 janv. 2007, 14:48

Bonjour,

Une jointure est toujours plus rapide qu'une sous requête.
Tout à fait, surtout qu'ici, on ne fait le lien qu'entre deux tables, quand ce sera avec 5 ou plus, les sous-requêttes imbriquées deviennent vite prises de tête.

par jojolapine » 12 janv. 2007, 14:43

bonjour,
et merci pour la précision ;-)
je change mes sources de suite !
[résolu]

par Ajoloca » 12 janv. 2007, 14:33

Bonjour,

Une jointure est toujours plus rapide qu'une sous requête.

par jojolapine » 12 janv. 2007, 14:19

mer ci ça fonctionne également:

Code : Tout sélectionner

SELECT d.id, d.nom_groupe, d.date_concert, s.nom FROM dates d, salles s WHERE s.id = d.id_salle LIMIT 0 , 30
après vu que je n'ai que quelques enregistrements, je ne sais pas laquelle solution est la plus rapide... :-k

par iclo » 12 janv. 2007, 12:01

Tu dois utiliser une jointure entre les deux tables.

Code : Tout sélectionner

SELECT d.date,s.nom FROM dates d, salles s WHERE s.id = d.id_salle

par jojolapine » 12 janv. 2007, 11:26

bon j'ai essayer ça:

Code : Tout sélectionner

SELECT `id` , `nom_groupe` , `date_concert` , ( SELECT `nom` FROM `salles` WHERE `id` = `dates`.`id_salle` ) FROM `dates` WHERE `poubelle` = 'non' ORDER BY `date_concert` DESC
ça fonctionne, mais est-ce performant, est-ce que y a mieu ?

récupérer valeur d'un id externe...

par jojolapine » 12 janv. 2007, 10:31

Bonjour à tous,
j'ai deux tables dont voici les structures:
table dates:

Code : Tout sélectionner

id autoincrement id_salle id externe date groupe etc....
et la table salle:

Code : Tout sélectionner

id autoincrement nom adresse etc
voilà et en gros, j'aimerai pouvoir faire un select sur la table date, et que la valeur de la salle soit remplacé par le nom correspondant...
actuellement j'ai ceci:

Code : Tout sélectionner

SELECT `id`,`nom_groupe`,`date_concert`,`id_salle` FROM `dates` WHERE `poubelle` = 'non' ORDER BY `date_concert` DESC
et je pense que c'est possible mais je ne vois pas comment... jointure?
bref merci d'avance ;-)