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

Форум MySQL

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

 

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

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

тема: Выбрать количество строк из нескольких таблиц
 
 автор: Roman2   (01.07.2007 в 17:23)   письмо автору
 
 

Помогите выбрать количество строк из нескольких таблиц. Пробывал разные варианты, но в книгах всё пишут не то что мне нужно. Из одной таблицы у меня выбирается, а вот из нескольких не могу написать правильно запрос. Это самое логичное что мне пришло в голову:

 $query = "SELECT COUNT(*) FROM garaj, product, land"; 
  $tbl = mysql_query($query); 
  if(!$tbl) exit("Ошибка ".mysql_error()); 
  echo "<tr><td> Всего позиций на сайте: </td><td>".mysql_result($tbl, 0)."</td>";  

Но оно почему-то умножает количество строк друг на друга и выводит мне этот результат.

   
 
 автор: Trianon   (02.07.2007 в 00:34)   письмо автору
 
   для: Roman2   (01.07.2007 в 17:23)
 

>Помогите выбрать количество строк из нескольких таблиц.

Поскольку информация из таблиц берется несвязанная, определять её нужно независимыми запросами.


>Но оно почему-то умножает количество строк друг на друга и выводит мне этот результат.

Это означает, что вы пытаетесь писать SQL-запросы по наитию.
Многотабличный запрос без условия связывания, выдающий произведение строк, не должен удивлять, потому что применяемая для него операция - и есть операция декартового произведения таблиц.

Вам явно нужно подучить если не теорию реляционных БД, то как минимум - основы построения многотабличных запросов SELECT .
А до этого - не пытаться их составлять.

   
 
 автор: Roman2   (02.07.2007 в 05:44)   письмо автору
 
   для: Trianon   (02.07.2007 в 00:34)
 

Так я тем и занимаюсь, что учу эти основы. А как можно учить без практики? Всё что я нашёл в книгах по этому поводу, для этой ситуации не подходит. Единственный вариант решения проблемы - спросить у знающего человека. Вот я и спрашиваю на форуме.

   
 
 автор: Trianon   (02.07.2007 в 10:48)   письмо автору
 
   для: Roman2   (02.07.2007 в 05:44)
 

>Всё что я нашёл в книгах по этому поводу, для этой ситуации не подходит.

Опишите, пожалуйста, ситуацию. В частности поясните, почему несвязанную информацию о таблицах требуется получать именно одним запросом?

>Единственный вариант решения проблемы - спросить у знающего человека. Вот я и спрашиваю на форуме.

Я могу написать Вам такой запрос.
Он Вас только запутает.

          SELECT 'garaj'   AS tbl, COUNT(*) AS cnt FROM `garaj` 
UNION ALL SELECT 'product' AS tbl, COUNT(*) AS cnt FROM `product` 
UNION ALL SELECT 'land'    AS tbl, COUNT(*) AS cnt FROM `land` 
;

   
 
 автор: roman2   (02.07.2007 в 11:04)   письмо автору
 
   для: Trianon   (02.07.2007 в 10:48)
 

Есть 4 таблицы, и в каждой из них есть определённое количество позиций. Я хочу посчитать их и вывести на сайте что-то вроде "на сайте 1430 объявлений".

Я могу сделать запросы ко всем таблицам отдельно и потом сложить полученный результат. Но мне кажется что это увеличит нагрузку на сервер, или нет? (мой сайт на хостинге софттайм). Да и вообще хочется сразу делать всё правильно, как положено.

   
 
 автор: Trianon   (02.07.2007 в 11:15)   письмо автору
 
   для: roman2   (02.07.2007 в 11:04)
 

>Есть 4 таблицы, и в каждой из них есть определённое количество позиций. Я хочу посчитать их и вывести на сайте что-то вроде "на сайте 1430 объявлений".

У вас объявления хранятся в разных таблицах ?
Если таблицы имеют одинаковую структуру - налицо нарушение нормализации БД.
Одинаковые данные должны храниться в одной таблице.


>Я могу сделать запросы ко всем таблицам отдельно и потом сложить полученный результат. Но мне кажется что это увеличит нагрузку на сервер, или нет?

Несущественно. Не пытайтесь заниматься оптимизацией простых одноразовых запросов раньше, чем увидите, что они действительно Вам мешают.

>Да и вообще хочется сразу делать всё правильно, как положено.
Всё сделать правильно не получится в любом случае.
Нужно расставлять приоритеты.
В Вашем случае - правильно перед практикой изучить хотя бы немного теории.

Могу посоветовать вот такую книгу: http://bookin.org.ru/books/54000039363.html

   
 
 автор: Roman2   (02.07.2007 в 11:40)   письмо автору
 
   для: Trianon   (02.07.2007 в 11:15)
 

>Если таблицы имеют одинаковую структуру - налицо нарушение нормализации БД.

Структура таблиц разная

   
 
 автор: Trianon   (02.07.2007 в 12:05)   письмо автору
 
   для: Roman2   (02.07.2007 в 11:40)
 

настолько разная, что её нельзя свести в одну?

   
 
 автор: Roman2   (02.07.2007 в 16:22)   письмо автору
 
   для: Trianon   (02.07.2007 в 12:05)
 

Я так с самого начала разделил всё по разделам, чтобы легче было работать с разделами. Конечно свести наверное можно, но это предполагает что нужно переделать весь сайт заново. Наверное при проектировании следующего сайта такие таблицы сведу в одну.

   
 
 автор: CrazyAngel   (02.07.2007 в 11:15)   письмо автору
 
   для: roman2   (02.07.2007 в 11:04)
 

эм... мне кажется можно было поступить по другому
сделать одну(!) таблицу с объявлениями а у них сделать поле в котором будет определенно к какому типу это объявление относится

   
 
 автор: Roman2   (02.07.2007 в 11:36)   письмо автору
 
   для: CrazyAngel   (02.07.2007 в 11:15)
 

спасибо за ответы. Книги у меня все по mysql и php вместе. Несколько книг авторов этого сайта. По mysql заказал книгу MySQL 5. В подлиннике(Кузнецов, Симдянов). Подойдёт для изучения БД?

   
Rambler's Top100
вверх

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