Page 1 sur 1

problème requette multiple

Posté : 16 juin 2011, 13:02
par eopla
Bonjour,

je suis en pleine prise de tête concernant une requette que j'essaye de faire pour un ami libraire.
J'essaye de lister tous les titres (+id) commençant par une lettre donnée par une variable $recherche.
à chaque fois, le résultat n'est pas juste et l'ensemble des données sont affichées.

ce que je cherche à obtenir est:

les titres commençant par A (ou autre lettre) et classer les titres par ordre alphabétique en faisant une différenciation entre ceux de revue et ceux des collections
exemple:

anarchie (id_revue) (icône revue)
anatole (id_revue) (icône collection))
anatomie (id_collection) (icône collection))
...

Si quelqu'un pouvais m’aiguiller sur l'erreur ou la démarche à suivre?

Bonne journée,

Eopla


MA REQUETTE

Code : Tout sélectionner

$requette_titres = mysql_query("SELECT revues.id as revue_id, revues.titre_fr as revue_titre, collections.id as collection_id, collections.titre_fr as collection_titre FROM collections, revues WHERE (collections.titre_$lang LIKE \"".$recherche."%\") OR (revues.titre_$lang LIKE \"".$recherche."%\") ORDER BY collection_titre,revue_titre ASC"); $num_requette_titres = mysql_num_rows($requette_titres); //echo "num_requette_titres = $num_requette_titres"; while ($row = mysql_fetch_array($requette_titres)) { // $revue_titre = $row["revue_titre"]; $collection_titre = $row["collection_titre"]; echo "revue_titre=$revue_titre<br>"; echo "collection_titre=$collection_titre<br>"; }

Re: problème requette multiple

Posté : 16 juin 2011, 16:17
par eopla
Re:

je viens d'essayer avec

Code : Tout sélectionner

$requette_titres = mysql_query("(SELECT revues.id as revue_id, revues.titre_$lang as revue_titre FROM revues WHERE revues.titre_$lang LIKE \"".$recherche."%\" ORDER BY revues.titre_$lang ASC) UNION (SELECT collections.id as collection_id, collections.titre_$lang as collection_titre FROM collections WHERE collections.titre_$lang LIKE \"".$recherche."%\" ORDER BY collections.titre_$lang ASC)"); $num_requette_titres = mysql_num_rows($requette_titres); //echo "num_requette_titres = $num_requette_titres"; while ($row = mysql_fetch_array($requette_titres)) { // $revue_titre = $row["revue_titre"]; $collection_titre = $row["collection_titre"]; echo "revue_titre = $revue_titre<br>"; echo "collection_titre = $collection_titre<br>"; }
pas plus concluant

Re: problème requette multiple

Posté : 17 juin 2011, 06:09
par eopla
Bonjour,

Après plusieurs dizaines de tests, je ne vois plus vers ou aller ni aucune idée.
Quelqu'un a t'il une idée et un peu de temps à me consacrer?

Bonne journée,

Eopla

Re: problème requette multiple

Posté : 17 juin 2011, 07:22
par Cyrano
Normal, comme il n'y a aucune condition de jointure, tu sors un produit cartésien, c'est à dire que pour chaque titre de revue trouvé, tu as toutes les collections et inversement.

Là, il faudrait faire une requête UNION qui pourrait ressembler à ceci :
SELECT
  revues.id       AS ouvrage_id,
  revues.titre_". $lang ." AS ouvrage_titre,
  'revue'         AS ouvrage_type
FROM revues
WHERE revues.titre_". $lang ." LIKE '".$recherche."%'
UNION
SELECT
  collections.id       AS ouvrage_id,
  collections.titre_". $lang ." AS ouvrage_titre,
  'collection'         AS ouvrage_type
FROM collections
WHERE collections.titre_". $lang ." LIKE '".$recherche."%'
ORDER BY ouvrage_titre ASC
En clair, no construit deux requêtes, une pour les revues, une autre pour les collections, et on regroupe en une seule requête avec UNION. Les requêtes qui composent UNION doivent collecter les mêmes colonnes d'où les alias similaires et le fait que dans ma proposition j'ai ajouté un alias ouvrage_type pour te permettre de savoir si le titre trouvé est une revue ou une collection.

Je te recommande une lecture de la documentation sur le sujet.

Re: problème requette multiple

Posté : 26 juin 2011, 20:35
par eopla
Bonsoir Myrano,

C'est super, cela marche parfaitement..., pas eu le temps de répondre avant car je me suis fait cambriolé, plus de PC... galère.

En tout cas, merci, merci, merci

Bonne fin de week-end,

Eopla.

Re: problème requette multiple

Posté : 26 juin 2011, 21:57
par Cyrano
Ok, il ne te reste qu'à mentionner le sujet comme [Résolu] en taggant la réponse correspondante.