|
|
|
| Имеется таблица:
id_main, id_parent, name
1, 0, О компании
2, 1, Новости
3, 1, История
4, 0, Партнеры
5, 1, Персонал
6, 0, Вакансии
|
как вывести (запрос одной строкой MySQL) в таком виде
О компании|3
Партнеры|0
Вакансии|0
т.е. Названия основных разделов и кол-во подразделов в них ("Новости" это подраздел в "О компании") | |
|
|
|
|
|
|
|
для: aurumkey
(22.09.2008 в 02:11)
| | Если дерево с неограниченной вложенностью (а такая структура это подразумевает), то одним запросом - никак. | |
|
|
|
|
|
|
|
для: aurumkey
(22.09.2008 в 02:11)
| | У меня была схожая ситуация, и при выводе кол-во подразделов использовал mysql_num_rows правда это не самый хороший вариант, если в базе очень много данных. | |
|
|
|
|
|
|
|
для: aurumkey
(22.09.2008 в 02:11)
| | говорят можно в одну таблицу впихнуть строго разграниченые списки
поставив auto_increment не на первичный ключ.
типа
CREATE TABLE examplm (
id_parent VARCHAR(12) NOT NULL,
id_main int(11) NOT NULL auto_increment,
name VARCHAR(255) NOT NULL,
PRIMARY KEY (id_parent, id_main)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO examplm VALUES(
'1_', NULL, 'О компании' ),
('1_', NULL, 'Новости' ),
('1_', NULL, 'История' ),
('2_', NULL, 'Партнеры' ),
('2_', NULL, 'Персонал' ),
('3_', NULL, 'Вакансии');
# приходится постоянно применять CONCAT
SELECT * FROM examplm WHERE CONCAT(id_parent, id_main) = '1_1';
#а плюс со строками не всегда работает как нужно иногда
SELECT * FROM examplm WHERE id_parent = 1+'_';
#DROP TABLE examplm;
|
но или я не знаю как правильно с таким обращаться , или оно просто такое неудобное получается ) | |
|
|
|