problème requette multiple

Eléphanteau du PHP | 11 Messages

16 juin 2011, 13:02

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>"; }

Eléphanteau du PHP | 11 Messages

16 juin 2011, 16:17

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

Eléphanteau du PHP | 11 Messages

17 juin 2011, 06:09

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

Mammouth du PHP | 19672 Messages

17 juin 2011, 07:22

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 11 Messages

26 juin 2011, 20:35

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.

Mammouth du PHP | 19672 Messages

26 juin 2011, 21:57

Ok, il ne te reste qu'à mentionner le sujet comme [Résolu] en taggant la réponse correspondante.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: