我有這個數據庫表與父子關係類別數據
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');
select查詢還有一個表,其中我一直USER_ID,例如CATEGORY_ID USER_ID 1000可以看到1和5,我把這個信息的會議讓我的查詢變得
SELECT *
FROM `category`
WHERE id
IN (1, 5)
這個查詢顯示Fruits > Apples
- 這一切工作正常。但是,我將「Green Apples
」標記爲Inherit = 'Yes'
,因此用戶1000也應該看到「Green Apples
」,但不是「Red Apples
」。如果青蘋果下的子類別標記爲inherit ='Y'... 「一打青蘋果」也應該列出來!
我想給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
,你會建議我什麼?如果可以更輕鬆地查詢,我是否打開了表格結構更改?感謝
是的,我明白你的意思。其實,上面的1&5是通過這樣的功能選擇的。例如,User_Category表只有5個,但我通過上面的類似函數選擇它的父項1。我只是想知道如果我可以用查詢來實現...如果沒有,我需要再次檢查該函數,看看如何獲得繼承= Y的 – user1421214 2013-04-22 12:21:52
你不能通過查詢實現這一點,由於簡單的事實,你不從一開始就知道一個類別有多少個子級別......但是如果你存儲了這個信息(categ_id |子級別的數量),你可以動態地生成一個類似於上面的查詢(聯接數目=子級別數目) – Stephan 2013-04-22 12:28:21
yes是正確的我不知道在一開始的水平...但是,我可以修改腳本,以保持水平.... – user1421214 2013-04-22 12:30:17