|
|
|
|
|
для: Евгений Петров
(30.08.2009 в 21:19)
| | Благодарю | |
|
|
|
|
|
|
|
для: itica
(30.08.2009 в 20:17)
| | Вариант 1 (хуже):
SELECT * FROM `stat` WHERE `id_user` IN (SELECT `id` FROM `users` WHERE `date`=NOW());
|
Варианты 2 и 3 (лучше):
SELECT s.* FROM
stat AS s
INNER JOIN
users AS u ON
u.id = s.id_user
AND u.date = NOW()
SELECT s.* FROM
users AS u
INNER JOIN
stat AS s ON
u.id = s.id_user
WHERE
u.date = NOW()
|
2-й вариант скорее всего будет более оправданным если в stats значений меньше чем в users, 3-й наоборот.
Проверьте EXPLAIN'ом | |
|
|
|
|
|
|
| Есть запрос на выборку SELECT * FROM `stat` WHERE `id_user`= ТУТ НУЖНО МНОЖЕСТВО ИЗ ДРУГОЙ БАЗЫ, а именно SELECT `id` FROM users` WHERE `date`=NOW();
Если бы второй запрос возвращал одно значение, то можно было бы написать SELECT * FROM `stat` WHERE `id_user`= SELECT `id` FROM `users` WHERE `date`=NOW();
Но второй запрос может вернуть несколько значений, как тут грамотно сделать сложный запрос, так как делать два запроса один из которых будет в цикле не очень хорошо. | |
|
|
|
|