select en une seule requête

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 : select en une seule requête

Re: select en une seule requête

par Invité » 11 août 2013, 13:53

Bonjour et merci beaucoup.
Aider les autres n'est pas seulement une question d'envie ou de temps, mais aussi une question de niveau.
Il m'arrive d'aider des gens ici et j'en tire une satisfaction très personnelle.

Je vois d'ailleurs à ta dernière réponse que ton niveau est bien plus élevé que la première réponse ne l'indiquait.
Certaines personnes attendent effectivement qu'on leur ponde du code: question mal posée, questions sans info, peu de recherches, bases les plus simples non assimilées, code non testé...ces personnes méritent un lien vers une doc.

Je suis content de ta réponse. Pas parce qu'elle pont du code, mais parce qu'elle explique un mécanisme. Je n'avais jamais entendu le concept de prédicat et avec ce mot, je serai plus qu'heureux d'aller fouiller dans la doc.

Ca ta sûrement pris plus de temps, mais des réponses comme cela font des heureux qui reviennent, recommandent, sans compter que ton contenu détaillé enrichit beaucoup plus le contenu du forum: tu aides aussi ce site qu'on aime tant.

Pour finir je dirai que ce forum est loin d'être inutile. Je ne citerai pas tous les gourous de ce forum qui ont tant contribué à la diffusion de php dans le monde francophone. Je ne sais pas si ils s'en rendent compte mais toute une génération de développeurs a leurs noms gravés en mémoire: cyrano, jojolapine, zeus...et tant d'autres que j'oublie (pardon et merci à eux).

Je travaille dans l'industrie du web et j'emploie souvent des personnes qui s'avèrent être pointus sur certains sujets.
Je suis sûr que je ne suis pas le seul.

Ta qualité de la réponse et le fait que tu ne m'aies pas simplement ignoré ou incendié me fait simplement penser que je dois bookmarker ce post au cas où nous pourrions collaborer.

@+ et merci.

Re: select en une seule requête

par moogli » 10 août 2013, 10:19

Et tu as fait quoi pour aider ces gens ?

ah oui rien.

tu veux du détails pas de sousis :
pas de FK, entre les tables, même avec mysql c'est réalisable et ceci est un défaut de conception car tu peux avoir n'importe quoi dans la table sans cohérence avec les autres tables.
SELECT vm.* FROM `virtuemart_medias` AS vm, `virtuemart_product_medias` AS vpm WHERE vpm.`virtuemart_media_id` = vm.`virtuemart_media_id` AND vpm.`virtuemart_product_id` = [productid récupéré au dessus]
ça c'est une jointure non normée où l'on confond prédicat et jointure.

effectivement je ne 'ai pas indiqué que récupérer les infos des deux tables avec une jointure pouvais inclure un prédicat sur l'un des deux.
SELECT `virtuemart_product_id` FROM `virtuemart_product_medias` AS vpm, `virtuemart_medias` AS vm WHERE vpm.`virtuemart_media_id` = vm.`virtuemart_media_id` AND `virtuemart_media_id` = 15
à quoi peux bien servir une jointure alors que l'information souhaite n'est que sur une table ?
=>
SELECT virtuemart_product_id FROM virtuemart_product_medias AS vpm WHERE virtuemart_media_id = 15
maintenant on écrit ce que l'on veux obtenir :
les informations de virtuemart_medias qui correspondent au virtuemart_product_id sélectionné dans la "requete 1"
select * from virtuemart_medias where virtuemart_product_id in(SELECT virtuemart_product_id FROM virtuemart_product_medias AS vpm WHERE virtuemart_media_id = 15)
je veux les infos complètes
jointure plus prédicat correct vu que la première requête peux retourner plus tuples.
SELECT *
  FROM virtuemart_medias
  JOIN virtuemart_product_medias
 USING (virtuemart_media_id)
 WHERE virtuemart_product_id IN
       (SELECT virtuemart_product_id
          FROM virtuemart_product_medias AS vpm
         WHERE virtuemart_media_id = 15)
voila jointure plus prédicat.
Tu me diras oui mais j'ai déjà tous ça, surement mais c'est ce que tu demande.


et si tu as du temps a perdre à fouiller dans les quelques milliers de réponses que j'au pu faire, inscrit toi et passe ce temps à répondre aux gens qui, comme toi, demande à ce forum inutile des réponse à ce qu'ils ne savent résoudre seul !

@+

Re: select en une seule requête

par Invité » 10 août 2013, 00:34

Pour le post "Nom de BD incorrect" sql-bases-donnees/nom-incorrect-t268790.html
=> Plutôt que de répondre au mec ce qu'il sait déjà, je lui aurais demandé comment il effectue sa suppression de bdd (ligne de commande, interface web, script...)

Pour le post "Requetes tri par tranche horaire ": sql-bases-donnees/requetes-tri-par-tran ... 68807.html
=> j'avoue que la question de donne pas envie, mais ta réponse est tout simplement incompréhensible

Pour le post "Interrogation de la gestion des NULL": sql-bases-donnees/interrogation-gestion ... 68810.html
=> Là c'est déjà mieux, tu as tenté d'élaborer une réponse. Je suppose que tu as répondu d'abord à ce post et que ça t'a tellement fatigué que tu as bâclé les suivants?

Re: select en une seule requête

par Invité » 10 août 2013, 00:22

Quelqu'un t'aborde dans la rue pour te demander une direction et que tu lui balances le plan de paris en 200 pages. franchement...

Re: select en une seule requête

par Invité » 10 août 2013, 00:14

De plus, j'ajoute que tu viens de mitrailler des réponses à 3 ou 4 autres posts qui étaient en attente.
Je trouve ces réponses aussi expéditives que celle que j'ai reçu, et je ne doute pas que les rédacteurs de ces posts seront de mon avis.

Re: select en une seule requête

par Invité » 10 août 2013, 00:10

Il n'y a rien de personnel et je te remercie d'avoir répondu mais:
vu la question posée, il est fort probable que j'aie déjà entendu parler des jointures.

Me renvoyer un lien vers la doc des jointures est stérile. Je le répète, s'il suffit de poster un lien vers de la doc, ce forum ne sert plus à rien.
Il est certains que certaines questions méritent un lien vers de la doc, surtout quand on sent que le niveau est trop faible ou que la personne n'a fait aucune recherche.

"Tu veux qu'on te ponde une requête" est une réponse aussi simpliste que le lien vers la doc.
Non, je ne demande pas qu'on me ponde une requête, je cherche de l'aide pour construire un raisonnement dans un cas spécifique.

Si tu prends le temps d'analyser la question posée, tu verras que ce n'est pas si simple que cela.
J'ai déjà utilisé les jointures à plusieurs requêtes mais là je cale.

Me renvoyer un lien vers la doc des jointures comme ça, je trouve ça expéditif.

Re: select en une seule requête

par moogli » 09 août 2013, 23:29

ben écoute la réponse c'est de faire une jointure, je t'ai fournis un lien faire ce qu'est une jointure !
la jointure va te permettre d'avoir toutes les infos en une seule fois et pour tous

Tu t'attendais a quoi ? que l'on te ponde un requête ?


Oui je répond à pas mal de post, tous comme beaucoup d'autre, et s'il n'y avait pas de personne comme moi qui répondent plus qu'ils ne question tu serais certain de ne pas avoir de réponse !

Re: select en une seule requête

par Invité » 09 août 2013, 23:07

Bon... je vois que moogli a été mandaté pour expédier tous les posts en attente.
J'ai passé 30 minutes à rédiger ma question correctement, tout ça pour obtenir un lien vers un cours SQL.

Dans ce cas à quoi ça sert de poser des questions spécifiques? Autant fermer le forum mes amis, allez tous compiler de la doc et vous n'aurez plus de questions à poser.
Merci quand même moogli.

Re: select en une seule requête

par moogli » 09 août 2013, 18:12

select en une seule requête

par Invité » 09 août 2013, 13:41

Bonjour à tous,

J'ai les deux tables suivantes:

=> une table n°1 : virtuemart_product_medias
CREATE TABLE IF NOT EXISTS `virtuemart_product_medias` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `virtuemart_product_id` int(1) unsigned NOT NULL DEFAULT '0',
  `virtuemart_media_id` int(1) unsigned NOT NULL DEFAULT '0',
  `ordering` int(2) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `i_virtuemart_product_id` (`virtuemart_product_id`,`virtuemart_media_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=611 ;
=> une table n°2: virtuemart_medias
CREATE TABLE IF NOT EXISTS `virtuemart_medias` (
  `virtuemart_media_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `virtuemart_vendor_id` smallint(11) NOT NULL DEFAULT '1',
  `file_title` char(126) NOT NULL DEFAULT '',
  PRIMARY KEY (`virtuemart_media_id`),
  KEY `i_virtuemart_vendor_id` (`virtuemart_vendor_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='Additional Images and Files which are assigned to products' AUTO_INCREMENT=1888 ;
Au départ, j'ai une seule information: un `virtuemart_media_id` = 15 dont le champ est disponible dans les 2 tables.
Je souhaite récupérer tous les enregistrements de la table n°2 qui ont un `virtuemart_product_id` identique à mon `virtuemart_media_id`= 15 dans la table n°1

Actuellement, je parviens au résultat en 2 requêtes:
1ère requête pour obtenir le `virtuemart_product_id` de mon `virtuemart_media_id`= 15:
SELECT `virtuemart_product_id` FROM `virtuemart_product_medias` AS vpm, `virtuemart_medias` AS vm WHERE vpm.`virtuemart_media_id` = vm.`virtuemart_media_id` AND `virtuemart_media_id` = 15
2ème requête pour obtenir tous les autres médias qui ont un `virtuemart_product_id` identique à celui obtenu dans la requête 1:
SELECT vm.* FROM `virtuemart_medias` AS vm, `virtuemart_product_medias` AS vpm WHERE vpm.`virtuemart_media_id` = vm.`virtuemart_media_id` AND vpm.`virtuemart_product_id` = [productid récupéré au dessus]
Je souhaite savoir s'il est possible et comment écrire une seule requête pour obtenir ce résultat.
En vous remerciant pour vos réponses.