Visa ett inlägg
Oläst 2010-05-16, 18:41 #1
zilveer zilveer är inte uppkopplad
Medlem
 
Reg.datum: Jun 2006
Inlägg: 128
zilveer zilveer är inte uppkopplad
Medlem
 
Reg.datum: Jun 2006
Inlägg: 128
Standard Nested class - mysql problem

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
zilveer är inte uppkopplad   Svara med citatSvara med citat