|
|
|
| Помогите выбрать количество строк из нескольких таблиц. Пробывал разные варианты, но в книгах всё пишут не то что мне нужно. Из одной таблицы у меня выбирается, а вот из нескольких не могу написать правильно запрос. Это самое логичное что мне пришло в голову:
$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>";
|
Но оно почему-то умножает количество строк друг на друга и выводит мне этот результат. | |
|
|
|
|
|
|
|
для: Roman2
(01.07.2007 в 17:23)
| | >Помогите выбрать количество строк из нескольких таблиц.
Поскольку информация из таблиц берется несвязанная, определять её нужно независимыми запросами.
>Но оно почему-то умножает количество строк друг на друга и выводит мне этот результат.
Это означает, что вы пытаетесь писать SQL-запросы по наитию.
Многотабличный запрос без условия связывания, выдающий произведение строк, не должен удивлять, потому что применяемая для него операция - и есть операция декартового произведения таблиц.
Вам явно нужно подучить если не теорию реляционных БД, то как минимум - основы построения многотабличных запросов SELECT .
А до этого - не пытаться их составлять. | |
|
|
|
|
|
|
|
для: Trianon
(02.07.2007 в 00:34)
| | Так я тем и занимаюсь, что учу эти основы. А как можно учить без практики? Всё что я нашёл в книгах по этому поводу, для этой ситуации не подходит. Единственный вариант решения проблемы - спросить у знающего человека. Вот я и спрашиваю на форуме. | |
|
|
|
|
|
|
|
для: 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`
;
|
| |
|
|
|
|
|
|
|
для: Trianon
(02.07.2007 в 10:48)
| | Есть 4 таблицы, и в каждой из них есть определённое количество позиций. Я хочу посчитать их и вывести на сайте что-то вроде "на сайте 1430 объявлений".
Я могу сделать запросы ко всем таблицам отдельно и потом сложить полученный результат. Но мне кажется что это увеличит нагрузку на сервер, или нет? (мой сайт на хостинге софттайм). Да и вообще хочется сразу делать всё правильно, как положено. | |
|
|
|
|
|
|
|
для: roman2
(02.07.2007 в 11:04)
| | >Есть 4 таблицы, и в каждой из них есть определённое количество позиций. Я хочу посчитать их и вывести на сайте что-то вроде "на сайте 1430 объявлений".
У вас объявления хранятся в разных таблицах ?
Если таблицы имеют одинаковую структуру - налицо нарушение нормализации БД.
Одинаковые данные должны храниться в одной таблице.
>Я могу сделать запросы ко всем таблицам отдельно и потом сложить полученный результат. Но мне кажется что это увеличит нагрузку на сервер, или нет?
Несущественно. Не пытайтесь заниматься оптимизацией простых одноразовых запросов раньше, чем увидите, что они действительно Вам мешают.
>Да и вообще хочется сразу делать всё правильно, как положено.
Всё сделать правильно не получится в любом случае.
Нужно расставлять приоритеты.
В Вашем случае - правильно перед практикой изучить хотя бы немного теории.
Могу посоветовать вот такую книгу: http://bookin.org.ru/books/54000039363.html | |
|
|
|
|
|
|
|
для: Trianon
(02.07.2007 в 11:15)
| | >Если таблицы имеют одинаковую структуру - налицо нарушение нормализации БД.
Структура таблиц разная | |
|
|
|
|
|
|
|
для: Roman2
(02.07.2007 в 11:40)
| | настолько разная, что её нельзя свести в одну? | |
|
|
|
|
|
|
|
для: Trianon
(02.07.2007 в 12:05)
| | Я так с самого начала разделил всё по разделам, чтобы легче было работать с разделами. Конечно свести наверное можно, но это предполагает что нужно переделать весь сайт заново. Наверное при проектировании следующего сайта такие таблицы сведу в одну. | |
|
|
|
|
|
|
|
для: roman2
(02.07.2007 в 11:04)
| | эм... мне кажется можно было поступить по другому
сделать одну(!) таблицу с объявлениями а у них сделать поле в котором будет определенно к какому типу это объявление относится | |
|
|
|
|
|
|
|
для: CrazyAngel
(02.07.2007 в 11:15)
| | спасибо за ответы. Книги у меня все по mysql и php вместе. Несколько книг авторов этого сайта. По mysql заказал книгу MySQL 5. В подлиннике(Кузнецов, Симдянов). Подойдёт для изучения БД? | |
|
|
|