selection avec jointure

mouna
Invité n'ayant pas de compte PHPfrance

01 mai 2005, 19:32

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

Mammouth du PHP | 19672 Messages

01 mai 2005, 19:39

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

mouna
Invité n'ayant pas de compte PHPfrance

01 mai 2005, 19:47

non ca n a aucun effet

Mammouth du PHP | 19672 Messages

01 mai 2005, 19:52

Sais pas trop, peut-être en utilisant DISTINCT
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

mouna
Invité n'ayant pas de compte PHPfrance

01 mai 2005, 19:58

Rien de special

ViPHP
pjl
ViPHP | 2119 Messages

01 mai 2005, 20:27

catid en int d'un coté et en varchar de l'autre, c'est normal ?

Mammouth du PHP | 19672 Messages

01 mai 2005, 20:47

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

mouna
Invité n'ayant pas de compte PHPfrance

01 mai 2005, 22:12

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

Eléphant du PHP | 287 Messages

02 mai 2005, 14:11

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

mouna
Invité n'ayant pas de compte PHPfrance

02 mai 2005, 15:37

ca n a aucun effet

Eléphant du PHP | 287 Messages

02 mai 2005, 15:44

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.

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

02 mai 2005, 16:20

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)
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Petit nouveau ! | 1 Messages

30 mai 2005, 00:11

J'ai posté ma question sur ce forum : http://www.phpfrance.com/forums/voir_sujet-3703.php

Merci si vous avez une idée :?