Requete - créer une liste sans doublon

pixi
Invité n'ayant pas de compte PHPfrance

06 févr. 2006, 19:22

Bonjour à tous

j'ai deux tables la première contient des catégories
par ex.:
id_cat nom
1 cat1
2 cat2
3 cat3...

la deuxième table des livres
id id_cat titre
1 2 le rouge et le noir
2 3 asterix et obélix
3 1 dictionnaire larousse
4 1 le petit robert

En fait je voudrais créer une liste en évitant les doublons
À l'affichage j'aimerais avoir:

cat 1
dictionnaire larousse
le petit robert

cat 2
le rouge et le noir

cat 3
astérix et obélix

J'ai essayé :
SELECT C.*,L.* FROM categories AS C, livres AS L WHERE C.id_cat=L.id_cat GROUP BY C.id_cat 
mais ça ne fonctionne pas :(

Est-ce que quelqu'un aurait une idée?

Merci

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

06 févr. 2006, 19:36

Salut,

à vu de nez je dirais qu'il suffit d'enlever cette clause de regroupement et a la place une clause de tri:
SELECT C.*,L.* FROM categories AS C, livres AS L WHERE C.id_cat=L.id_cat ORDER BY C.id_cat
en passant évite d'utiliser * pour séléctionner tous les champ mieux vaut appler que les champs dont tu auras besoin

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

pixi
Invité n'ayant pas de compte PHPfrance

06 févr. 2006, 19:50

Merci pour ton aide.
J'ai déjà essayé cette solution et j'optiens des resultats incomplet, en fait un seul résultat par catégorie s'affiche avec cette méthode.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

06 févr. 2006, 20:12

tu est sûr ?

j'ai remplacé "GROUP BY" par "ORDER BY"

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 52 Messages

06 févr. 2006, 20:17

salut

je dirais (non testé) :


$req_index=('SELECT `L`.`id_cat` AS `ref_cat`,
	   		`L`.`titre`,
	   		`C`.`id_cat`,
	   		`C`.`nom`
	  		 FROM `L`
	  		 LEFT JOIN `C`
	   		 ON `L`.`id_cat` = `C`.`id_cat`
	  		 ORDER BY `C`.`nom`, `L`.`titre`') or die ('Erreur mysql : '.mysql_error());
$last_id_cat='';
while ($data_index = mysql_fetch_array($req_index))
{

	//affichage nom de la catégorie
	if ($data_index['ref_cat'] != $last_id_cat)
	{
	echo '<br /><span style="font-weight:bold; text-decoration : underline;">'.$data_index['nom'].'</span><br />';
	}
	
	//affichage nom du livre
	echo $data_index['titre'].'<br />';

$last_id_cat=$data_index['ref_cat'];
}

pixi
Invité n'ayant pas de compte PHPfrance

06 févr. 2006, 20:51

Truc, désolé ça fonctionne, tu as raison. Mais je n'arrive pas à organiser les résultats par catégorie

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

06 févr. 2006, 20:59

niveau organisation la proposition de patami devrait fonctionner.

tu initialise une variable pour les catégorie si elle est différente de la précédente affiochage de la catégorie.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Invité
Invité n'ayant pas de compte PHPfrance

06 févr. 2006, 21:51

Merci à tous les deux!
Ça fonctionne. J'ai juste corrigé la requete:
$req_index= mysql_query("SELECT L.*,C.* FROM catalogue AS L LEFT JOIN categories AS C ON L.id_cat = C.id ORDER BY C.id");

pixi
Invité n'ayant pas de compte PHPfrance

06 févr. 2006, 21:52

[Résolu]

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

06 févr. 2006, 22:09

Le tag [Résolu] s'obtient en utilisant le bouton "Mettre Résolu".
Cette fonctionnalité est accessible aux membres inscrits et non aux invités.

Si tu veux t'inscrire, c'est l'occasion... ;)