cs_bouzazi
Messages postés27Date d'inscriptionmardi 25 mars 2003StatutMembreDernière intervention12 novembre 2012
-
12 nov. 2012 à 14:14
cs_Malkuth
Messages postés268Date d'inscriptionsamedi 22 février 2003StatutMembreDernière intervention24 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.
cs_Malkuth
Messages postés268Date d'inscriptionsamedi 22 février 2003StatutMembreDernière intervention24 avril 20134 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.