|
|
|
| Иерархия следующая:
таблица A
таблица B
таблица C
|
В каждой строке таблицы B есть поле, в котором указано, какой записи из таблицы A принадлежит эта строка.
В каждой строке таблицы C есть поле, в котором указано, какой записи из таблицы B принадлежит эта строка.
Как подсчитать максимально быстро и выгодно сколько записей таблицы C принадлежит конкретно заданной записи тыблицы A?
Спасибо. | |
|
|
|
|
|
|
|
для: Maxam
(26.02.2011 в 17:18)
| | Пример:
Записи в таблице A:
id | name | desc
0 | имя | описание
1 | ещё имя | другое описание
2 | третье имя | ещё одно описание
|
Записи в таблице B:
id | id_table_a | name | desc
0 | 2 | имя | описание
1 | 0 | ещё имя | другое описание
2 | 1 | третье имя | ещё одно описание
|
Записи в таблице C:
id | id_table_b | name | desc
0 | 0 | имя | описание
1 | 2 | ещё имя | другое описание
2 | 1 | третье имя | ещё одно описание
|
Ответ: Таблице A с id=1 принадлежит 1 запись в таблице C. | |
|
|
|
|
|
|
|
для: Maxam
(26.02.2011 в 17:25)
| | написал на быструю руку..... может где что нибудь подправить надо будет, попробуйте так
<?php
$id=5;//преположим дано id=5
//выбираем все в таблице В где id_table_a=$id
$sql="SELECT * FROM B WHERE id_table_a=$id";
$res=mysql_query($sql);
$row_res = mysql_fetch_assoc($res);
//$totalRows_res = mysql_num_rows($res);
//разбиваем полученные id в массив
$tmp_array=array();
while ($row_res = mysql_fetch_assoc($res)) {
$tmp_array[] = $row_res['id'];
}
$tmp_list=implode(",", $tmp_array);//создаем список id разделенные запятой
//выбираем записи из С
$query = "SELECT * FROM C WHERE id_table_b IN (".$tmp_list.")";
$query_res = mysql_query($query) or die(mysql_error());
$row_query_res = mysql_fetch_assoc($query_res);
$total_Rows = mysql_num_rows($row_query_res);
echo $total_Rows;//кол-во записей
?>
|
| |
|
|
|
|
|
|
|
для: bab-nike
(26.02.2011 в 20:29)
| | Иными словами:
1. Пройтись по всем записям таблицы B, найти совпадения со значением id таблицы A и создать новый массив из id таблицы B.
2. Пройтись по всем записям таблицы C, которые совпадают с новым массивом.
Так? | |
|
|
|
|
|
|
|
для: Maxam
(26.02.2011 в 22:24)
| | ну по сути да, таков алгоритм(то что я вижу), а реализовать можно по разному:) | |
|
|
|
|
|
|
|
для: Maxam
(26.02.2011 в 17:18)
| |
SELECT COUNT(*) FROM table_c WHERE id_table_b IN (SELECT id FROM table_b WHERE id_table_a = 1)
|
| |
|
|
|
|
|
|
|
для: Trianon
(26.02.2011 в 22:30)
| | Вот это интересно, а если вложенность будет более трёх таблиц? | |
|
|
|
|
|
|
|
для: Maxam
(27.02.2011 в 01:27)
| | то запрос усложнится. | |
|
|
|
|
|
|
|
для: Trianon
(27.02.2011 в 02:01)
| | Спасибо огромное. | |
|
|
|