vérification de multiples ID dans une seule requete

Eléphant du PHP | 428 Messages

21 nov. 2009, 14:07

Bonjour,

Je me demandais comment vérifier de multiples ID dans une seule requete.
Pourquoi: C'est pour un moteur de recherche qui ne doit afficher les résultats que si une galerie est non-protégée (ou si elle est protégée, on vérifie les authorized_id).

Les authorized_id proviennent d'un array lequel provient de la table USERS.
Exemple : $authorized_id = array (1,2,3,4,10,12,30);

Exemple de recherche :
Si une galerie est considérée comme privée (champ: gallery_private = true) et que l'utilisateur connecté possède l'id de la galerie (en authorized_id), on affiche TOUS les enregistrements non privés et l'enregistrement (ou les enregistrements) PRIVE où l'id de la galerie est authorisée (autorized_id) ET LE TOUT BIEN SUR SUIVANT LE(S) MOTS(S) CLEF(S).

Voici ce que j'ai tenté de faire :
$req_search="SELECT $CfgTableMain.gallery_id, $CfgTableMain.gallery_date, $CfgTableMain.gallery_author, $CfgTableMain.gallery_place, $CfgTableMain.gallery_title, $CfgTableMain.gallery_descr, $CfgTableMain.gallery_int_title, $CfgTableObjects.object_title, $CfgTableObjects.object_filename, $CfgTableObjects.object_type
FROM $CfgTableMain LEFT JOIN $CfgTableObjects ON ($CfgTableMain.gallery_id = $CfgTableObjects.gallery_id) 
WHERE ($CfgTableMain.gallery_date LIKE '%$searchitem%' OR $CfgTableMain.gallery_author LIKE '%$searchitem%' OR $CfgTableMain.gallery_place LIKE '%$searchitem%'	 OR $CfgTableMain.gallery_title LIKE '%$searchitem%' OR $CfgTableMain.gallery_descr LIKE '%$searchitem%' OR CfgTableObjects.object_title LIKE '%$searchitem%')
AND ($CfgTableMain.gallery_private = 'false' OR $CfgTableMain.gallery_private = '' OR ($CfgTableMain.gallery_private = 'true' AND $CfgTableMain.gallery_id = '19,1'))";
Vous remaquerez donc que j'essaye d'utiliser de multiples ID séparés par des virgules à la ligne : OR ($CfgTableMain.gallery_private = 'true' AND $CfgTableMain.gallery_id = '19,1')

Mais il s'avère que ça ne marche pas. La requête ne prend pas en charge les multiples ID.

Ma question est donc de savoir comment je puis tester de multiples ID dans une seule requête ...

Merci pour votre aide,
Raph

Eléphant du PHP | 428 Messages

21 nov. 2009, 14:44

C'est bon ... et comme d'habitude j'ai trouvé seul et c'était ENCORE une bétise.
J'utilise dans ma requête un "IN" et le tour est joué ...

Exemple :
$req_search="SELECT $CfgTableMain.gallery_id, $CfgTableMain.gallery_date, $CfgTableMain.gallery_author, $CfgTableMain.gallery_place, 
$CfgTableMain.gallery_title, $CfgTableMain.gallery_descr, $CfgTableMain.gallery_int_title, $CfgTableObjects.object_title, 
$CfgTableObjects.object_filename, $CfgTableObjects.object_type

FROM $CfgTableMain LEFT JOIN $CfgTableObjects ON ($CfgTableMain.gallery_id = $CfgTableObjects.gallery_id) 
			 
WHERE ($CfgTableMain.gallery_date LIKE '%$searchitem%' OR $CfgTableMain.gallery_author LIKE '%$searchitem%' OR $CfgTableMain.gallery_place LIKE '%$searchitem%'	 OR $CfgTableMain.gallery_title LIKE '%$searchitem%' OR $CfgTableMain.gallery_descr LIKE '%$searchitem%' OR CfgTableObjects.object_title LIKE '%$searchitem%')

AND ($CfgTableMain.gallery_private = 'false' OR $CfgTableMain.gallery_private = '' OR ($CfgTableMain.gallery_private = 'true' AND $CfgTableMain.gallery_id IN ($19,1)))";
Explication: Si l'utilisateur est connecté et est réconnu en tant que 'user', on affiche tous les enregistrements non protégés et ceux qui sont protégés où l'id de la galerie est reconnue dans le tableau 'autorized_id', le tout, bien évidemment suivant le(s) mot(s) clef(s).