|
|
|
| Есть 4 таблицы
usres с двумя полями: id и age
links с двумя полями : id и uid (id ссылки и user id владелец ссылки)
clicks с тремя полями : uid, lid, date (id usera , id пользователя, дата перехода по ссылке)
links_cache с тремя полями - lid, cache, validation (id ссылки)
Нужно выбрать ВСЕ из таблицы КЭШ у тех ссылoк где cache.validity = true
владелец ссылки старше тридцати и в таблице clicks нет записи такого перехода сегодня от одного uid к этому lid.
Попробую еще другими словами объяснить.
Есть таблица с переходами по ссылками uid, lid, date
user id - кто перешл
link id по какой ссылке перешел
date - дата перехода
Есть таблица пользователей с id пользователя и age возрастом.
Есть таблица ссылок с id - номер ссылки, uid- это id владельца ссылки.
Есть таблица КЭШ. В ней нет всех ссылок. Есть только часть.
Нужно выбрать из этой таблица одну запись из тех где я по этой ссылке еще не переходил сегодня, и владелец ссылки старше 30.
Можно одним запросом, можно двумя, можно как угодно. Главное чтоб работало быстро.
А то не знаю как это сделать.
--
Совмещать таблицы кэш и links не хочу. В этом скрипте релевантны только 2-3 поля из каждой таблица. На самом деле в этих таблицах гораздо больше полей, в кэше нет записей для всех ссылок и используются они всегда по отдельности за исключением вот одного скрипта.
Помогите пожалуйста составить запрос. Никак в голову не придет что сделать то надо.
Огромнейшее спасибо за ранее) | |
|
|
|
|
|
|
|
для: _Efim_
(07.05.2009 в 21:52)
| | Вы весьма вольно оперируете именами.
В результате разобраться в том, чего именно нужно достичь, может быть и можно, изрядно попотев...
Но общее впечатление такое, что Вы заинтересованы в обратном. | |
|
|
|
|
|
|
|
для: Trianon
(07.05.2009 в 23:56)
| | Хорошо, давай тогда попробую с другой логикой объяснить.
Допустим у меня есть три таблицы.
Пользователи: номер | возраст
Ссылки: номер_ссылки | номер_владельца | валидность (true\false)
Переходы: Номер_пользователя | номер_ссылки | дата
Нужно выбрать одну ссылку из таблицы ссылок
к которой небыло переходов от меня сегодня
а владелец ссылки старше 30ти
Пробовал так:
В помеченном месте видимо что-то и не укладывается.
SELECT cсылки.*
FROM ссылки
JOIN пользователи ON пользователи.номер_пользователя = ссылки.номер_владельца
LEFT JOIN переходы ON переходы.номер_пользователя <> ссылки.номер_ссылки AND `date` = $thisday
WHERE пользователи.возраст >= 30 AND пользователи.номер_пользователя <> $myid AND переходы.номер_ссылки IS NULL
LIMIT 1
|
| |
|
|
|
|
|
|
|
для: _Efim_
(08.05.2009 в 12:00)
| |
SELECT c.*
FROM ссылки с
JOIN пользователи п ON с.номер_владельца=п.номер_пользователя AND п.возраст >= 30
LEFT JOIN переходы р
ON р.номер_ссылки = с.номер_ссылки
AND р.номер_пользователя = $myid
AND р.дата = $thisday
WHERE р.номер_ссылки IS NULL
|
| |
|
|
|
|
|
|
|
для: Trianon
(08.05.2009 в 15:35)
| | Спасибо, я попробую =) | |
|
|
|
|
|
|
|
для: Trianon
(08.05.2009 в 15:35)
| | У меня этот запрос выполнялся минуты три..
Нельзя его никак оптимизировать ? | |
|
|
|
|
|
|
|
для: _Efim_
(10.05.2009 в 12:35)
| | таблицы большие, наверное.
может быть и можно. Может быть и нет. | |
|
|
|