|
|
|
| Здравствуйте. Нужно сделать выборку из нескольких таблиц по условию, т.е.
SELECT COUNT(*) FROM categories, goods WHERE categories.seoname='vodonagrevateli' OR goods.seoname='vodonagrevateli'
|
что-то типа этого.
т.е. таблиц несколько, во всех таблицах есть поле seoname, вот и надо проверить сколько суммарно записей во всех таблицах с seoname='vodonagrevateli'.
Помогите составить запрос. читал про JOIN но так и не понял как его использовать в данной ситуации. | |
|
|
|
|
|
|
|
для: Spenser
(21.01.2011 в 10:22)
| | попробуй продукт dbForge for Mysql позволяющий графически строить запросы если так не можешь | |
|
|
|
|
|
|
|
|
для: Spenser
(21.01.2011 в 10:22)
| | Можно поступить следующим образом
SELECT COUNT(categories.seoname)
FROM categories LEFT.JOIN goods USING(seoname)
WHERE categories.seoname='vodonagrevateli'
|
| |
|
|
|
|
|
|
|
для: cheops
(21.01.2011 в 10:40)
| | А этот запрос будет считать колво записей только в таблице categories или во всех которые я перечислю: categories LEFT.JOIN goods LEFT.JOIN pages и т.д.? | |
|
|
|
|
|
|
|
для: Spenser
(21.01.2011 в 10:46)
| | ни в том, ни в другом.
Он будет считать количество строк табличного соединения, в которых это поле не является NULL.
Задачу Вы описать не смогли, поскольку в качестве описания привели пример с запросом декартового произведения, которое, я уверен, как работает не знаете, и что выдает - не проверяли. | |
|
|
|
|
|
|
|
для: Spenser
(21.01.2011 в 10:46)
| | Вообще-то объединение - это декартово произведение, тут будет считаться только совпадающие записи. У меня подозрение, что вам вообще нужен UNION, т.е. что-то
SELECT COUNT(*) FROM categories
WHERE seoname='vodonagrevateli'
UNION
SELECT COUNT(*) FROM goods
WHERE seoname='vodonagrevateli'
|
в результате вы получите результирующу таблицу со столбцов цифр, сумма их даст количество всех записей во всех таблицах, удовлетворяющих условию WHERE seoname='vodonagrevateli'. Возможно вам это нужно? | |
|
|
|
|
|
|
|
для: cheops
(21.01.2011 в 10:49)
| | Вообще-то декартово произведение вариант соединения.
А объединение вовсе даже - UNION | |
|
|
|
|
|
|
|
для: cheops
(21.01.2011 в 10:49)
| | Да, этот запрос как раз то что нужно. в него я могу добавлять сколько угодно (10-20 таблиц) или тогда он будет выполняться долго?
и еще, если я сделаю так:
$sql = mysql_query(запрос);
$fetch = mysql_fetch_row($sql);
print_r($fetch);
|
соответственно выдаст уже количество записей в объединенных таблицах? | |
|
|
|
|
|
|
|
для: Spenser
(21.01.2011 в 11:04)
| | запрос cheops'а выдаст несколько строк (по числу таблиц).
Вы же выбираете только одну.
Если Вам и вправду требуются именно эти данные , то неясно, какой смысл брать их строго одним запросом. Проще, чем набор отдельных он всяко не станет. | |
|
|
|
|
|
|
|
для: Trianon
(21.01.2011 в 11:06)
| | я понял как мне получить количество записей.
вообще после запроса мне нужно получить только колво записей в таблица соответствующие условию. по запросу cheops'a все работает . или его можно как то упростить? | |
|
|
|
|
|
|
|
для: Spenser
(21.01.2011 в 11:20)
| | Выдать несколько независимых запросов
SELECT COUNT(*) FROM categories WHERE seoname='vodonagrevateli'
|
SELECT COUNT(*) FROM goods WHERE seoname='vodonagrevateli'
|
и т.д. | |
|
|
|
|
|
|
|
для: Trianon
(21.01.2011 в 11:24)
| | я так делал до этого. но начитавшись про оптимизацию запросов к БД я подумал объединить их в один запрос. думаете в данном случае это не целесообразно (объединение запросов) для увеличения скорости обработки запросов (один сложный запрос ведь выполниться быстрее чем несколько мелких)? просто кол-во таблиц может быть большим (относительно конечно большим) порядка 20-ти. | |
|
|
|
|
|
|
|
для: Spenser
(21.01.2011 в 11:43)
| | >(один сложный запрос ведь выполниться быстрее чем несколько мелких)?
Откуда такой вывод? Совершенно в этом не убежден. Скорее наоборот.
Если у Вас порядка 20 таблиц с одним и тем же полем, и к ним в качестве основных следуют одинаковые запросы, это повод пересмотреть всю схему БД (а может быть и модель данных).
Похоже, что она проектировалась не под те задачи, которые на ней пытаются решать.
Если это запросы неосновные, и погоды в производительности всего приложения не делают, Вы зря взялись за оптимизацию этого участка. | |
|
|
|
|
|
|
|
для: Trianon
(21.01.2011 в 11:51)
| | Спасибо за информацию к размышлению!:) попробую посчитать по времени выполнения запрос что в моем случае предпочтительнее. | |
|
|
|
|
|
|
|
для: cheops
(21.01.2011 в 10:49)
| | Спасибо за помощь, теперь получаю нужные данные:) | |
|
|
|