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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Combiner 3 requètes [résolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Combiner 3 requètes [résolu]

n°1490932
papanorami​x
Posté le 13-12-2006 à 16:46:03  profilanswer
 

Bonjour,
je voudrais faire une requete mysql qui va me chercher les données relatives a un identifiant.
 
Jusque là rien de compliqué,
mais je voudrais que cette même requete me trouve l'identifiant inférieur et supérieur.
 
il faudrait en quelque sorte combiner ces 3 requetes:

Code :
  1. SELECT champ1, champ2
  2. FROM table
  3. WHERE id='2'
  4. SELECT id as id_inf
  5. FROM table
  6. WHERE id < '2'
  7. LIMIT 0,1
  8. ORDER BY id DESC
  9. SELECT id as id_sup
  10. FROM table
  11. WHERE id > '2'
  12. LIMIT 0,1
  13. ORDER BY id ASC


 
How do this ?  :??:


Message édité par papanoramix le 14-12-2006 à 15:09:11
mood
Publicité
Posté le 13-12-2006 à 16:46:03  profilanswer
 

n°1490940
MagicBuzz
Posté le 13-12-2006 à 16:56:39  profilanswer
 


select id, champ1, champ2
from table
where id = (select max(id) from table where id < 2)
union all
select id, champ1, champ2
from table
where id = (select min(id) from table where id > 2)


 
:spamafote:

n°1490941
papanorami​x
Posté le 13-12-2006 à 17:03:00  profilanswer
 

D'accord, mais là il va me retourner une ligne contenant 'champ1', 'champ2' et 'id' pour l'id inferieur, l'id superieur et l'id demandé.
 
Le plus simple pour moi serait de récuperer une seule ligne contenant toutes ces infos: champ1, champ2, id, id_superieur, id_inferieur

n°1490943
anapajari
s/travail/glanding on hfr/gs;
Posté le 13-12-2006 à 17:07:09  profilanswer
 

Code :
  1. select A.f1, A.f2, B.f3, B.f4, C.f5, C.f6 from (    SELECT champ1 , champ2 FROM table  WHERE id='2') as A, (...id < 2) as B, ( ...id>2 ) as C


mais c'est pas bo :o

n°1490946
MagicBuzz
Posté le 13-12-2006 à 17:10:57  profilanswer
 

anapajari a écrit :

Code :
  1. select A.f1, A.f2, B.f3, B.f4, C.f5, C.f6 from (    SELECT champ1 , champ2 FROM table  WHERE id='2') as A, (...id < 2) as B, ( ...id>2 ) as C


mais c'est pas bo :o


c'est même pire que ça, parceque si tu fais juste des >2 et <2, tu ramènes toute la base ;)
donc faut refoutre des limit partout, ou des sous-sous-requête avec des max et min comme mon exemple.
 
ça devient clairement pas beau :D

n°1490948
papanorami​x
Posté le 13-12-2006 à 17:15:15  profilanswer
 

ya pas un truc vachement beau tout simple ? ;)

n°1490950
MagicBuzz
Posté le 13-12-2006 à 17:18:49  profilanswer
 

ben si les id sont séquenciels et sans trous (truc impossible à garantir généralement), tu peux faire id + 1 et id - 1 au lieu de <2 et >2 ce sera déjà moins pire...

n°1490951
papanorami​x
Posté le 13-12-2006 à 17:19:56  profilanswer
 

Oui, j'y ai bien pensé... mais si on suprime une de ces lignes bonjour les dégats...

n°1490952
MagicBuzz
Posté le 13-12-2006 à 17:20:51  profilanswer
 

bah ouais (d'où le "truc impossible à garantir généralement" ;))

n°1490954
MagicBuzz
Posté le 13-12-2006 à 17:22:06  profilanswer
 

sinon, avec Oracle ou SQL Server, tu peux utiliser des fonctions analytiques pour faire ça. Mais à mon avis les requêtes seront aussi pourries, et en plus tu vas récupérer des infos dont t'as pas besoin (genre un cumul progressif ou autre)

mood
Publicité
Posté le 13-12-2006 à 17:22:06  profilanswer
 

n°1490958
anapajari
s/travail/glanding on hfr/gs;
Posté le 13-12-2006 à 17:32:20  profilanswer
 

MagicBuzz a écrit :

ça devient clairement pas beau :D

je savais que ça te plairait  :wahoo: ( mais pour les instructions qui manquent c'était flemme inside hein)
 
sinon tu prends les 3 premiers qui sont >= au min de ceux qui sont inférieurs à la valeur fixe.
Mais c'est pas encore super!

n°1490959
MagicBuzz
Posté le 13-12-2006 à 17:34:26  profilanswer
 

http://sqlpro.developpez.com/SQL_Server_2K5/N1.php
 
si mysql a le même genre de fonctions que le 1.7, alors y'a moyen de moyenner avec RANK()

n°1491202
papanorami​x
Posté le 14-12-2006 à 11:24:31  profilanswer
 

je vois pas là ...

n°1491289
Beegee
Posté le 14-12-2006 à 12:37:25  profilanswer
 

Code :
  1. SELECT champ1,
  2.        champ2,
  3.        (SELECT max(id) FROM maTable WHERE id < mt.id) AS id_precedent,
  4.        (SELECT min(id) FROM maTable WHERE id > mt.id) AS id_suivant
  5. FROM   maTable mt
  6. WHERE  id = 2;

n°1491336
MagicBuzz
Posté le 14-12-2006 à 14:21:20  profilanswer
 

tiens, je viens de m'appercevoir que j'avais mal lu la question depuis le départ :pt1cable:

n°1491377
papanorami​x
Posté le 14-12-2006 à 15:08:43  profilanswer
 

Cool, pourquoi se prendre le chou ?
 
merci :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Combiner 3 requètes [résolu]

 

Sujets relatifs
[Résolu][C#] WebMethode et renvoi d'objet[résolu] commerce en ligne avec options spéciales...
[Javascript] document.forms[0].submit(); [résolu]md5 [résolu]
[RESOLU] Instabilité sur Online avec "if (strstr..."[PHP][résolu] date, le mois n'apparait pas toujours!
[PHP/MySQL] compter nombre requetes SQL ?[RESOLU] 2 listbox relation n à m
[résolu] film le plus loué SQLrecuperer aleatoirement des donnees d'un tableau [RESOLU]
Plus de sujets relatifs à : Combiner 3 requètes [résolu]


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