Hejsan,
jag hittade en väldigt bra sida som beskriver Nested class, den kan hittas på
http://sslim7.com/
Jag har skapat tabellen:
Kod:
CREATE TABLE nested_category (
category_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
lft INT NOT NULL,
rgt INT NOT NULL
);
INSERT INTO nested_category
VALUES(1,'ELECTRONICS',1,20),(2,'TELEVISIONS',2,9),(3,'TUBE',3,4),
(4,'LCD',5,6),(5,'PLASMA',7,8),(6,'PORTABLE ELECTRONICS',10,19),
(7,'MP3 PLAYERS',11,14),(8,'FLASH',12,13),
(9,'CD PLAYERS',15,16),(10,'2 WAY RADIOS',17,18);
Jag vill t.ex. ha ut en "single path" via denna nested class.
Koden jag använder är:
Kod:
SELECT parent.name
FROM nested_category AS node,
nested_category AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND node.name = 'FLASH'
ORDER BY parent.lft;
+----------------------+
| name |
+----------------------+
| ELECTRONICS |
| PORTABLE ELECTRONICS |
| MP3 PLAYERS |
| FLASH |
+----------------------+
Som ni ser så får jag ut sökvägen till Flash via alla överkategorier.
Men MySQL hanterar inte denna fråga som optimal, jag får ut följande via explain queryn:
Kod:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE node ref lft,name name 62 const 1 Using where; Using temporary; Using filesort
1 SIMPLE parent ALL lft NULL NULL NULL 10 Range checked for each record (index map: 0x2)
Hur ska jag undvika "Using where; Using temporary; Using filesort" samt "Range checked for each record (index map: 0x2)"
Känns inte optimalt att använda nested class med MySQL, eller är det jag som missat något?
Tacksam för alla svar.
Mvh