Problème : Requête SQL Union & order By

cs_bouzazi Messages postés 27 Date d'inscription mardi 25 mars 2003 Statut Membre Dernière intervention 12 novembre 2012 - 12 nov. 2012 à 14:14
cs_Malkuth Messages postés 268 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 24 avril 2013 - 18 nov. 2012 à 21:16
Salut tout le monde;

J’ai dans ma base de données MySQL trois tables image, client et CasC.
Je voudrai récupérer la liste de CasC dans le client id = 14 et complété le reste de la liste (liste de 10 CasC) par le reste des CasC dernièrement ajouté à la base.
J’utilise donc cette requête :


(
(SELECT c.* FROM CasC c, image i WHERE c.PreOp i.ID AND i.client 14 AND c.corbeille = 0 order by c.ID desc) UNION (SELECT c.* FROM CasC c, image i WHERE c.PreOp = i.ID AND i.client  <> 14 AND c.corbeille = 0 order by c.ID desc) LIMIT 10;


Le problème est que cette requête me renvoi non pas les dernier CasC ajoute à la table mais les premiers CasC.
Quelqu’un aurait-il une idée sur l'erreur dans ma requête et comment obtenir la liste que je veux.

Merci beaucoup

1 réponse

cs_Malkuth Messages postés 268 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 24 avril 2013 4
18 nov. 2012 à 21:16
tu peux rusé comme suit mais ca va manquer de perf :
SELECT c.* 
FROM CasC c
INNER JOIN image i
 ON c.PreOp = i.ID
WHERE c.corbeille = 0 
ORDER BY 
 CASE i.client
  WHEN 14 THEN 0
  ELSE -c.ID
 END ASC
LIMIT 10;


ou bien quelque chose du genre :

SELECT src.*
FROM (
 SELECT c.*, 0 ord 
 FROM CasC c
 INNER JOIN image i
  ON c.PreOp = i.ID
 WHERE c.corbeille 0 AND i.client 14
 ORDER BY c.ID DESC
 LIMIT 10
UNION
 SELECT c.*, 1 ord 
 FROM CasC c
 INNER JOIN image i
  ON c.PreOp = i.ID
 WHERE  c.corbeille = 0 AND i.client <> 14
 ORDER BY c.ID DESC
 LIMIT 10
) src
ORDER BY src.ord ASC, src.ID DESC
LIMIT 10

la seconde version devrais pouvoir tenir compte des index éventuel et je met des limits aux sous requettes pour que la requette final n'ai que 20 enregistrements à traiter au maximum pour son tri et son limit.
Rejoignez-nous