Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Подсчитать количество записей в базе данных.
 
 автор: Maxam   (26.02.2011 в 17:18)   письмо автору
 
 

Иерархия следующая:

таблица A
     таблица B
          таблица C


В каждой строке таблицы B есть поле, в котором указано, какой записи из таблицы A принадлежит эта строка.
В каждой строке таблицы C есть поле, в котором указано, какой записи из таблицы B принадлежит эта строка.

Как подсчитать максимально быстро и выгодно сколько записей таблицы C принадлежит конкретно заданной записи тыблицы A?

Спасибо.

  Ответить  
 
 автор: Maxam   (26.02.2011 в 17:25)   письмо автору
 
   для: 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.

  Ответить  
 
 автор: bab-nike   (26.02.2011 в 20:29)   письмо автору
 
   для: 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;//кол-во записей
?>

  Ответить  
 
 автор: Maxam   (26.02.2011 в 22:24)   письмо автору
 
   для: bab-nike   (26.02.2011 в 20:29)
 

Иными словами:
1. Пройтись по всем записям таблицы B, найти совпадения со значением id таблицы A и создать новый массив из id таблицы B.
2. Пройтись по всем записям таблицы C, которые совпадают с новым массивом.

Так?

  Ответить  
 
 автор: bab-nike   (26.02.2011 в 23:57)   письмо автору
 
   для: Maxam   (26.02.2011 в 22:24)
 

ну по сути да, таков алгоритм(то что я вижу), а реализовать можно по разному:)

  Ответить  
 
 автор: Trianon   (26.02.2011 в 22:30)   письмо автору
 
   для: 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) 

  Ответить  
 
 автор: Maxam   (27.02.2011 в 01:27)   письмо автору
 
   для: Trianon   (26.02.2011 в 22:30)
 

Вот это интересно, а если вложенность будет более трёх таблиц?

  Ответить  
 
 автор: Trianon   (27.02.2011 в 02:01)   письмо автору
 
   для: Maxam   (27.02.2011 в 01:27)
 

то запрос усложнится.

  Ответить  
 
 автор: Maxam   (27.02.2011 в 02:55)   письмо автору
 
   для: Trianon   (27.02.2011 в 02:01)
 

Спасибо огромное.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования