Page 1 sur 1

selection avec jointure

Posté : 01 mai 2005, 19:32
par mouna
bonjour

soit mes 2 tables, une pour les categories et une autre pour les sous categories:

CREATE TABLE `cat_tbl` (
`catid` int(11) NOT NULL auto_increment,
`Cat` varchar(255) NOT NULL default '',
UNIQUE KEY `catid` (`catid`)
) TYPE=MyISAM AUTO_INCREMENT=5 ;

#
# Dumping data for table `cat_tbl`
#

INSERT INTO `cat_tbl` VALUES (1, 'cat1');
INSERT INTO `cat_tbl` VALUES (2, 'cat2');
INSERT INTO `cat_tbl` VALUES (3, 'cat3');
INSERT INTO `cat_tbl` VALUES (4, 'cat4');

# --------------------------------------------------------

#
# Table structure for table `sous_cat_tbl`
#

CREATE TABLE `sous_cat_tbl` (
`id` int(11) NOT NULL auto_increment,
`catid` varchar(30) NOT NULL default '',
`Sous_Cat` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=7 ;

#
# Dumping data for table `sous_cat_tbl`
#

INSERT INTO `sous_cat_tbl` VALUES (1, '1', 'souscat1');
INSERT INTO `sous_cat_tbl` VALUES (2, '2', 'souscat2');
INSERT INTO `sous_cat_tbl` VALUES (3, '3', 'souscat3');
INSERT INTO `sous_cat_tbl` VALUES (4, '4', 'souscat4');
INSERT INTO `sous_cat_tbl` VALUES (5, '1', 'souscat11');
INSERT INTO `sous_cat_tbl` VALUES (6, '4', 'souscat41');

alor j ajoute des sous categories pour chaque categorie principale.
a la fin du compte, je veux recuperer les sous categories pour chacune des categories principale:

je fais ca:

$sql1 = mysql_query ("SELECT cat_tbl.catid, cat_tbl.Cat, sous_cat_tbl.id, sous_cat_tbl.catid, sous_cat_tbl.Sous_Cat FROM cat_tbl, sous_cat_tbl WHERE cat_tbl.catid = sous_cat_tbl.catid order by id ASC") or die ("erreur req ".mysql_error());

mais ca m affiche toutes les sous categories dans toutes les categories


merci d avance

Posté : 01 mai 2005, 19:39
par Cyrano
Il te manque une clause GROUP BY : je suis pas spur de moi en la matière, mais ta requête devrait ressembler à :

Code : Tout sélectionner

SELECT cat_tbl.catid, cat_tbl.Cat, sous_cat_tbl.id, sous_cat_tbl.catid, sous_cat_tbl.Sous_Cat FROM cat_tbl, sous_cat_tbl WHERE cat_tbl.catid = sous_cat_tbl.catid GROUP BY cat_tbl.catid ORDER BY cat_tbl.catid ASC

Posté : 01 mai 2005, 19:47
par mouna
non ca n a aucun effet

Posté : 01 mai 2005, 19:52
par Cyrano
Sais pas trop, peut-être en utilisant DISTINCT

Posté : 01 mai 2005, 19:58
par mouna
Rien de special

Posté : 01 mai 2005, 20:27
par pjl
catid en int d'un coté et en varchar de l'autre, c'est normal ?

Posté : 01 mai 2005, 20:47
par Cyrano
catid en int d'un coté et en varchar de l'autre, c'est normal ?
Bien vu pjl, j'aouve qu'elle m'avait échappé celle là ;)

Posté : 01 mai 2005, 22:12
par mouna
catid en int d'un coté et en varchar de l'autre, c'est normal ?
Bien vu pjl, j'aouve qu'elle m'avait échappé celle là ;)
je pense ke si

Posté : 02 mai 2005, 14:11
par thierry
salut,

si tu as une version de mysql > 4.1 regarde du côté de la fonction group_concat :

http://dev.mysql.com/doc/mysql/fr/group ... tions.html

comme j'ai une ancienne version de mysql j'ai pas pu tester mais je pense que d'autres personnes sur le forum doivent connaitre.

thierry

Posté : 02 mai 2005, 15:37
par mouna
ca n a aucun effet

Posté : 02 mai 2005, 15:44
par thierry
comme j'ai pas la bonne version de mysql ça va être dur de te filer un coup de main.

est ce que tu as la bonne version de mysql (je présume quand même que oui vu ta réponse).

sinon envoi ton code et ta requête pour que ceux qui ont la bonne version de mysql puissent faire quelquechose.

Posté : 02 mai 2005, 16:20
par sadeq
C'est tout sauf un problème de version de MySQL, en fait notre ami(e) ne sait pas ce qu'il (elle) veut.
....je veux recuperer les sous categories pour chacune des categories principale:

je fais ca:

$sql1 = mysql_query ("SELECT cat_tbl.catid, cat_tbl.Cat, sous_cat_tbl.id, sous_cat_tbl.catid, sous_cat_tbl.Sous_Cat FROM cat_tbl, sous_cat_tbl WHERE cat_tbl.catid = sous_cat_tbl.catid order by id ASC") or die ("erreur req ".mysql_error());

....
Il faut savoir ce que tu veux. Ta requête t'affiche exactement ce que tu nous dis vouloir.
... mais ca m affiche toutes les sous categories dans toutes les categories
Ton mais m'éttone, n'est ce pas ce que tu voulais ...

A mon avis tu as mal exprimé ce que tu veux à nous at à SQL.
Car en définitif, ta requête affiche toutes les sous-catégories des catégories existantes (même si elles sont classées)

Si tu veux les sous-catégories d'une catégorie donnée il faut inclure un filtre sur l'id de la catégorie dans le WHERE

N'oubli pas que le regroupement est important et aussi les types de de tes clés de filtrage (je pense à catid qui doit être de même type dans les deux tables car c'est un lien)

Bonjour j'ai un soucis identique..

Posté : 30 mai 2005, 00:11
par charlie
J'ai posté ma question sur ce forum : http://www.phpfrance.com/forums/voir_sujet-3703.php

Merci si vous avez une idée :?