Requête mysql

WRInaute discret
Salut,

Comment vous feriez pour prendre à coup sur 10 ID's d'une table, sachant qu'une priorité est donné à une partie du where

J'en suis là :
SELECT ID FROM TABLE WHERE ((DossierID = 2 AND FileID = 6) OR (FileID = 6)) LIMIT 10

En gros je prend tous les ID Si dossierID = 2 et FileID = 6 (Le probleme c'est que parfois il n'y en a que 5 par exemple) et compléter la liste par FileID=6 (donc élargir pour complèter).

Une idée? (j'sais pas si j'ai été clair.)
 
WRInaute accro
Tu es sur de tes parenthèses ? Ce ne serait pas plutôt

SELECT ID FROM TABLE WHERE DossierID = 2 AND (FileID = 6 OR FileID = 6) LIMIT 0,10
 
WRInaute impliqué
J'ai pas tout bien compris, mais est-ce que ceci te conviendrait ?

Code:
SELECT ID FROM TABLE WHERE FileID = 6
ORDER By FIELD(DossierID, 2) ASC
LIMIT 10
 
WRInaute accro
Bon alors ce qui passe chez moi c'est de sélectionner les champs désiré dans la table et de restreindre avec un limit.
Pour que les X premières réponses correspondent a un critère donné et que ce soit complété par total - X suivant un autre critère il faut faire des sous requêtes qui seront évaluée une a une. Si en plus on demande un résultat trié ASC ou DESC ça fonctionne (tant qu'il y a que 2 critères, la priorité sera donc donnée a l'une ou l'autre rubrique)

par exemple j'ai une table qui contient des id (clé primaire), des id de rubriques (idrub) et des titres (entre autre)

Si je veux tous les id et titre de la rubrique 1 (il y en a 18) et qu'il me faut en fait 20 résultats et que je souhait compléter avec les titres de la rubrique 43 (4 titres dedans) donc avoir les 18 de rub 1 et 2 de rub 43 je fais ça:

SELECT id,id_rub,titre FROM `table`
WHERE
id IN (select id from `table` where id_rub=1) OR
id IN (select id from `table` where id_rub=43)
ORDER BY id_rub ASC
LIMIT 0, 20

Attention il est conseillé d'avoir de bons index sur id car sinon ça va chauffer sur des grosses tables ...
 
WRInaute occasionnel
Je ne suis pas certain d'avoir saisie le problème mais bon je me lance :roll: :

Code:
SELECT ID FROM TABLE WHERE FileID = 6 AND (DossierID = 2 OR dossierId IS NULL) order by DossierID ASC LIMIT 10

On prend tous ceux qui ont :fileId 6 ET ( dossierId 2 OU aucun dossierID)
 
WRInaute discret
zeb a dit:
Bon alors ce qui passe chez moi c'est de sélectionner les champs désiré dans la table et de restreindre avec un limit.
Pour que les X premières réponses correspondent a un critère donné et que ce soit complété par total - X suivant un autre critère il faut faire des sous requêtes qui seront évaluée une a une. Si en plus on demande un résultat trié ASC ou DESC ça fonctionne (tant qu'il y a que 2 critères, la priorité sera donc donnée a l'une ou l'autre rubrique)

par exemple j'ai une table qui contient des id (clé primaire), des id de rubriques (idrub) et des titres (entre autre)

Si je veux tous les id et titre de la rubrique 1 (il y en a 18) et qu'il me faut en fait 20 résultats et que je souhait compléter avec les titres de la rubrique 43 (4 titres dedans) donc avoir les 18 de rub 1 et 2 de rub 43 je fais ça:

SELECT id,id_rub,titre FROM `table`
WHERE
id IN (select id from `table` where id_rub=1) OR
id IN (select id from `table` where id_rub=43)
ORDER BY id_rub ASC
LIMIT 0, 20

Attention il est conseillé d'avoir de bons index sur id car sinon ça va chauffer sur des grosses tables ...

Effectivement t'a plutôt intérêt à avoir de bons index! lol
 
WRInaute discret
boby55 a dit:
Je ne suis pas certain d'avoir saisie le problème mais bon je me lance :roll: :

Code:
SELECT ID FROM TABLE WHERE FileID = 6 AND (DossierID = 2 OR dossierId IS NULL) order by DossierID ASC LIMIT 10

On prend tous ceux qui ont :fileId 6 ET ( dossierId 2 OU aucun dossierID)

J'avais opté pour une solution similaire mais qui ne fonctionné pas! Et pourtant j'en suis pas à ma première requête SQL. J'creuserai un peu
 
WRInaute impliqué
Oui mais le problème de base ne mentionne pas que quand FileID = 6 alors DossierID doit être soit égale à 2 soit NULL. Il indique qu'il doit prendre en priorité FileID = 6 et DossierID = 2 et que s'il y a moins de résultat, continuer à sélectionner les lignes quand FileID = 6 et peu importe la valeur de DossierID (NULL, 3, 5, etc.).

Ma requête donner plus haut devrait répondre à ta problématique.
 
WRInaute discret
Blount a dit:
Oui mais le problème de base ne mentionne pas que quand FileID = 6 alors DossierID doit être soit égale à 2 soit NULL. Il indique qu'il doit prendre en priorité FileID = 6 et DossierID = 2 et que s'il y a moins de résultat, continuer à sélectionner les lignes quand FileID = 6 et peu importe la valeur de DossierID (NULL, 3, 5, etc.).

Ma requête donner plus haut devrait répondre à ta problématique.

Je confirme. Elle etait tordu celle là. Merci encore.
 
Discussions similaires
Haut