Je les tableaux suivants:Besoin d'aide avec MySQL que je crois implique une jointure réflexive
TABLE: Catégorie
catid catfatherid catname
1 0 United States
2 1 Arizona
3 1 Arkansas
4 1 California
et TABLE: ad
adid catid title
1 2 Arizona Item
2 3 Arkansas Item
3 4 California Item
Je peux les rejoindre sans aucun problème et trouver l'article que je cherche, par exemple:
SELECT category.catid, category.catfatherid, category.catname, A.adid, A.title
FROM ad A
LEFT JOIN category AS category ON A.catid = category.catid
where category.catname LIKE '%%Arizona%%'
Cependant, je dois également être en mesure de rechercher par "États-Unis" et avoir toutes les entrées dans la table d'annonces qui ont un Catid qui a également un catfatherid de cet élément apparaît également.
Des idées sur comment faire cela?
Table SQL ci-dessous ...
CREATE TABLE `ad` (
`adid` int(11) unsigned NOT NULL AUTO_INCREMENT,
`catid` int(11) NOT NULL,
`title` varchar(50) NOT NULL DEFAULT '',
PRIMARY KEY (`adid`)
);
INSERT INTO `ad` (`adid`, `catid`, `title`)
VALUES
(1,2,'Arizona Item'),
(2,3,'Arkansas Item'),
(3,4,'California Item');
CREATE TABLE `category` (
`catid` int(11) unsigned NOT NULL AUTO_INCREMENT,
`catfatherid` int(11) DEFAULT NULL,
`catname` varchar(50) NOT NULL DEFAULT '',
PRIMARY KEY (`catid`)
);
INSERT INTO `category` (`catid`, `catfatherid`, `catname`)
VALUES
(1,0,'United States'),
(2,1,'Arizona'),
(3,1,'Arkansas'),
(4,1,'California');
Votre hiérarchie comporte-t-elle un maximum de 2 niveaux? Sinon, vous pourriez envisager une représentation alternative. MySQL n'a pas de CTE récursif. –
Oui. Idéalement, le pays aurait été dans sa propre table, mais le créateur de cette pensée ayant des pays, des États/provinces dans le même tableau la voie à suivre. – TWLATL