|
|
|
| есть несколько таблиц, у всех есть поле id_lalala, как проверить есть ли значение в этих таблицах
сейчас делаю так, например если надо искать для значения 11
SELECT
(SELECT COUNT(*) FROM table_1 WHERE id_lalala=11) t1,
(SELECT COUNT(*) FROM table_2 WHERE id_lalala=11) t2,
(SELECT COUNT(*) FROM table_3 WHERE id_lalala=11) t3,
(SELECT COUNT(*) FROM table_4 WHERE id_lalala=11) t4
|
таких таблиц будет где-то 25 хотя может быть и больше
может есть более оптимальный вариант?
спасибо | |
|
|
|
|
|
|
|
для: naushka
(03.06.2011 в 16:08)
| | ну вот примерно есть такие таблицы
table_car: id, id_user, ...
table_pc: id, id_user, ...
table_email: id, id_user, ...
...
так вот, мне надо узнать что есть у юзера а что нет
надо получить такой массив
{
'car' => 1, // есть
'pc' => 0, // нет
'email' => 1, // есть
...
}
ну или такой
{
'car' => 2, // есть 2 машины
'pc' => 0, // нет
'email' => 4, // есть 4 емэйла
...
} | |
|
|
|
|
|
|
|
для: naushka
(03.06.2011 в 17:12)
| | Как вариант объединение LEFT JOIN к таблице пользователей, но вероятно, это тоже будет не сахар. Такая значительная нормализация всегда приводит к многоэтажным запросам. Если вас беспокоит производительность вероятно есть смысл подумать о хэш-таблице, где бы эти данные были денормализованы. Т.е. таблица id_user, car, pc, email с 0/1 на предмет того есть или нет. | |
|
|
|
|
|
|
|
для: naushka
(03.06.2011 в 17:12)
| | а если через UNION :
SELECT COUNT(*) as cnt FROM table_1 WHERE id_lalala=11 UNION ALL
SELECT COUNT(*) as cnt FROM table_2 WHERE id_lalala=11 UNION ALL
SELECT COUNT(*) as cnt FROM table_3 WHERE id_lalala=11 UNION ALL
SELECT COUNT(*) as cnt FROM table_4 WHERE id_lalala=11
|
| |
|
|
|