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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Trier avec union

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Trier avec union

n°2233645
zezette
"Allez hop, au revoir"
Posté le 18-07-2014 à 15:30:20  profilanswer
 

Bonsoir à tous,
 
Je fais la requete suivante :
 

Code :
  1. (SELECT numpage, titre FROM NEW_Pages WHERE  titre LIKE '%machin%' ORDER BY titre)
  2. UNION
  3. (SELECT numpage, titre FROM NEW_Pages WHERE contenu LIKE '%machin%' ORDER BY titre);


 
Le but étant que si le mot est dans le titre, le résultat soit avant que si le mot est dans le contenu, mais qu'il y ait quand même deux ordres alphabétiques (je sais pas si je suis clair :D)
 
Pas d'erreur mais les résultats sont triés par ID...
 
Une idée ?


Message édité par zezette le 18-07-2014 à 15:33:23

---------------
"Par moment j'me d'mande si chui pas con" G. de Suresnes
mood
Publicité
Posté le 18-07-2014 à 15:30:20  profilanswer
 

n°2233646
ddr555
Posté le 18-07-2014 à 16:06:50  profilanswer
 

suffit de faire  
 
select numpage, titre from  
((SELECT numpage, titre FROM NEW_Pages WHERE  titre LIKE '%machin%' )
 UNION
(SELECT numpage, titre FROM NEW_Pages WHERE contenu LIKE '%machin%' )) a
order by titre;

n°2233647
gpl73
Posté le 18-07-2014 à 16:08:52  profilanswer
 

il te suffit de trier ton union sur le champ titre
(SELECT  'U1', numpage, titre FROM NEW_Pages WHERE  titre LIKE '%machin%' ORDER BY titre)
UNION
(SELECT 'U2', numpage, titre FROM NEW_Pages WHERE contenu LIKE '%machin%' ORDER BY titre)
ORDER By titre  
 
:)
 
Guillaume


---------------
mieux vaut être un con au chaud, qu'un con gelé lol
n°2233648
gpl73
Posté le 18-07-2014 à 16:11:00  profilanswer
 

Je viens de voir que j'ai posté plus tardivement que ddr555 ...
sur As400, on a pas besoin de faire ce que tu fais ddr555 :)


---------------
mieux vaut être un con au chaud, qu'un con gelé lol
n°2233649
ddr555
Posté le 18-07-2014 à 16:12:53  profilanswer
 

tu es archéologue ? :D
 
moi c'est en oracle

n°2233659
lasnoufle
La seule et unique!
Posté le 18-07-2014 à 19:39:55  profilanswer
 

J'ai plutot l'impression que la demande c'est d'avoir tous les resultats de la premiere requete, tries entre eux, puis ceux de la seconde, tries entre eux.
 
Si c'est ca, dans la requete du premier poste, il suffit de changer le UNION (qui trie et enleve les lignes en double) en UNION ALL (qui se contente de tout mettre a la suite sans chercher a comprendre):

(SELECT numpage, titre FROM NEW_Pages WHERE  titre LIKE '%machin%' ORDER BY titre)
UNION ALL
(SELECT numpage, titre FROM NEW_Pages WHERE contenu LIKE '%machin%' ORDER BY titre);

 
 
Autre option, si on veut garder le UNION a tout prix:

SELECT numpage, titre
FROM (
    (SELECT numpage, titre, 1 AS ordre FROM NEW_Pages WHERE  titre LIKE '%machin%')
    UNION ALL
    (SELECT numpage, titre, 2 AS ordre FROM NEW_Pages WHERE contenu LIKE '%machin%'))
ORDER BY ordre, titre;

 
 
EDIT: en fait non car je suppose qu'il faut quand meme virer les resultats doubles. Du coup un truc comme ca?

SELECT numpage, titre
FROM (
    SELECT num_page, titre, MIN(ordre) AS ordre
    FROM (    
        SELECT numpage, titre, 1 AS ordre FROM NEW_Pages WHERE  titre LIKE '%machin%'
        UNION ALL
        SELECT numpage, titre, 2 AS ordre FROM NEW_Pages WHERE contenu LIKE '%machin%')
    )
    GROUP BY num_page, titre
)
ORDER BY ordre, titre);

 
RE-EDIT: fix des parentheses :o


Message édité par lasnoufle le 18-07-2014 à 19:54:20

---------------
C'était vraiment très intéressant.
n°2233663
zezette
"Allez hop, au revoir"
Posté le 18-07-2014 à 20:09:15  profilanswer
 

Oui en effet, je veux les résultats de la première triés suivis des résultats de la secondes triés eux aussi et pas les resultats des 2 ensembles et triés. Les doublons, j'y avais pas pensé mais en effet, je les veux pas :)
 
Je teste ça mardi :)
 
Merci en tous cas


Message édité par zezette le 18-07-2014 à 20:11:29

---------------
"Par moment j'me d'mande si chui pas con" G. de Suresnes
n°2233987
zezette
"Allez hop, au revoir"
Posté le 24-07-2014 à 12:49:28  profilanswer
 

J'ai testé avec le union all (tant pis pour les doublons) mais ça ne marche pas :( c'est toujours trié sur la clé primaire plutôt que sur le titre


---------------
"Par moment j'me d'mande si chui pas con" G. de Suresnes
n°2234034
gpl73
Posté le 24-07-2014 à 21:23:44  profilanswer
 

zezette ton order by n'est pas au bon endroit:

 

(select1
union
select2)
order by titre...

 

je ne sais même pas si les orders by dans les unions servent à quelques choses...à voir :)

 

Guillaume


Message édité par gpl73 le 24-07-2014 à 21:24:24

---------------
mieux vaut être un con au chaud, qu'un con gelé lol
n°2234049
zezette
"Allez hop, au revoir"
Posté le 25-07-2014 à 09:48:10  profilanswer
 

Ca, ça trie bien par ordre alphabétique mais résultats du select 1 et 2 mélangés. Le but ici est de trier le select1 et d'y coller les résultats du select2 sans les doublons qui seraient déjà dans le select1.
 
J'essaie la 2e solution de lasnoufle


Message édité par zezette le 25-07-2014 à 10:04:54

---------------
"Par moment j'me d'mande si chui pas con" G. de Suresnes
mood
Publicité
Posté le 25-07-2014 à 09:48:10  profilanswer
 

n°2234051
zezette
"Allez hop, au revoir"
Posté le 25-07-2014 à 10:04:39  profilanswer
 

J'ai donc testé la 2e solution de lasnoufle un peu modifiée car il y a une erreur :
 

Code :
  1. SELECT numpage, titre, ordre
  2. FROM (
  3.     (SELECT numpage, titre, 1 AS ordre FROM NEW_Pages WHERE  titre LIKE '%machin%')
  4.     UNION
  5.     (SELECT numpage, titre, 2 AS ordre FROM NEW_Pages WHERE contenu LIKE '%machin%')) AS tabletemporaire
  6. ORDER BY ordre, titre;


 
Ca marche, les résultats sont triés comme je veux, mais... il y a des doublons :(


Message édité par zezette le 25-07-2014 à 10:05:24

---------------
"Par moment j'me d'mande si chui pas con" G. de Suresnes
n°2234052
zezette
"Allez hop, au revoir"
Posté le 25-07-2014 à 10:15:18  profilanswer
 

J'ai trouvé :)
 

Code :
  1. SELECT DISTINCT numpage, titre
  2. FROM (
  3.     (SELECT numpage, titre, 1 AS ordre FROM NEW_Pages WHERE  titre LIKE '%machin%')
  4.     UNION
  5.     (SELECT numpage, titre, 2 AS ordre FROM NEW_Pages WHERE contenu LIKE '%machin%')) AS tabletemporaire
  6. ORDER BY ordre, titre;


 
Merci à tous pour votre assistance :)


---------------
"Par moment j'me d'mande si chui pas con" G. de Suresnes

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

  Trier avec union

 

Sujets relatifs
créer un tableau clé valeur (int) trier par valeur descTrier des groupes via jquery datatables
Trier des donnees sur deux colonnes ( ID + Version)UNION de 4 tables, GROUP BY NomServeur HAVING MAX(Date)
Trier années de naissances cadets, juniors, seniorsTrier une liste de cellules
[algo] trier alphabétiquement une liste chainée[C#] Trier un tableau d'objet
[python] : trier une liste sur deux criètes (histoire de ".")Faire un Where sur un UNION
Plus de sujets relatifs à : Trier avec union


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