私はこのdbテーブルを持っています
CREATE TABLE IF NOT EXISTS `category` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`parent_id` int(11) NOT NULL,
`name` varchar(100) NOT NULL,
`inherit` enum('Y','N') NOT NULL DEFAULT 'N',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ;
--
-- Dumping data for table `category`
--
INSERT INTO `category` (`id`, `parent_id`, `name`, `inherit`) VALUES
(1, 0, 'Fruits', 'N'),
(2, 0, 'Electronics', 'N'),
(3, 0, 'Furniture', 'N'),
(4, 0, 'Garden', 'N'),
(5, 1, 'Apples', 'N'),
(6, 1, 'Bananas', 'N'),
(7, 5, 'Green Apples', 'Y'),
(8, 5, 'Red Apples', 'N'),
(9, 2, 'Mobiles', 'Y'),
(10, 2, 'Televisions', 'N'),
(11, 9, 'Android', 'N'),
(12, 9, 'iPhone', 'Y'),
(13, 7, 'One Dozen Green Apples', 'Y'),
(14, 7, 'Two Dozens Green Apples', 'N');
user_id、category_id を保持する別のテーブルがあります。たとえば、user_id 1000 は 1 と 5 を表示できます。この情報をセッションに入れて、クエリが次のようになるようにします。
SELECT *
FROM `category`
WHERE id
IN ( 1, 5 )
このクエリは示していますFruits > Apples
-これはすべて正常に機能します。しかし、ユーザー 1000 には " " も表示されますが、 " " は表示Green Apples
されないため、" "にマークを付けました。緑色のリンゴの下に継承 = 'Y' とマークされたサブカテゴリがある場合...たとえば、「1 ダースの緑色のリンゴ」もリストする必要があります!!Inherit = 'Yes'
Green Apples
Red Apples
UNION を試してみようと思ったのですが、2 レベル以上深くする方法がわかりません...
SELECT * FROM (
SELECT *
FROM `category`
WHERE id
IN ( 1, 5 )
UNION
SELECT c.*
FROM `category` c
INNER JOIN `category` parent ON parent.id = c.id AND c.inherit = 'Y'
WHERE c.parent_id
IN ( 1, 5 )
) all_cats
あなたは私に何を提案しますか? クエリが簡単になる場合は、テーブル構造の変更を開いていますか? ありがとう