|
|
|
| Струкрура таблиц
CREATE TABLE 'base' (
'id' mediumint(8) NOT NULL auto_increment,
'hostname' varchar(64) NOT NULL default '',
'idspider' mediumint(6) NOT NULL default '0',
PRIMARY KEY ('id'),
UNIQUE KEY 'Hostname' ('hostname')
) TYPE=MyISAM;
CREATE TABLE 'spider' (
'id' mediumint(8) NOT NULL auto_increment,
'parent' mediumint(8) default NULL,
PRIMARY KEY ('id')
) TYPE=MyISAM;
|
В spider.parent хранится id катигории. Если null то это запись из конря, если 1 то все записи входят в первую запись (в этой же таблице)
Записи выбираются так
SELECT sp.*, COUNT(bt.'id') as counter
FROM ". _SPIDER_TABLE ." sp
LEFT JOIN ". _BASE_TABLE ." bt
ON bt.'idspider' = sp.'id'
WHERE sp.'parent' = $id OR sp.'id' = $id
GROUP BY sp.'id';
|
т.е. counter это кол-во записей собранных этим пауком. А как добавить в это кол-во и те, что собраны его "потомками" (где spider.parent = $id) | |
|
|
|
|
|
|
|
для: Artem S.
(17.11.2005 в 10:46)
| | Одним запросом пожалуй что никак... здесь необходимо рекурсивную функцию которая будет спускаться по $id вниз. | |
|
|
|
|
|
|
|
для: cheops
(17.11.2005 в 13:31)
| | Получилось! сам даже не ожидал.
SELECT sp.*, COUNT(DISTINCT bt.'id') as counter, COUNT(DISTINCT bt2.'id') as counter2
FROM robot_spider sp
LEFT JOIN robot_spider sp2
ON sp2.'parent' = sp.'id'
LEFT JOIN guest_base bt
ON bt.'idspider' = sp.'id'
LEFT JOIN guest_base bt2
ON bt2.'idspider' = sp2.'id'
WHERE sp.'parent' = $id OR sp.'id' = $id
GROUP BY sp.'id';
|
| |
|
|
|