Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Запрос из четырех таблиц. никак не осилю
 
 автор: _Efim_   (07.05.2009 в 21:52)   письмо автору
 
 

Есть 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 поля из каждой таблица. На самом деле в этих таблицах гораздо больше полей, в кэше нет записей для всех ссылок и используются они всегда по отдельности за исключением вот одного скрипта.


Помогите пожалуйста составить запрос. Никак в голову не придет что сделать то надо.
Огромнейшее спасибо за ранее)

  Ответить  
 
 автор: Trianon   (07.05.2009 в 23:56)   письмо автору
 
   для: _Efim_   (07.05.2009 в 21:52)
 

Вы весьма вольно оперируете именами.
В результате разобраться в том, чего именно нужно достичь, может быть и можно, изрядно попотев...
Но общее впечатление такое, что Вы заинтересованы в обратном.

  Ответить  
 
 автор: _Efim_   (08.05.2009 в 12:00)   письмо автору
 
   для: 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

  Ответить  
 
 автор: Trianon   (08.05.2009 в 15:35)   письмо автору
 
   для: _Efim_   (08.05.2009 в 12:00)
 

SELECT c.* 
  FROM ссылки с 
  JOIN пользователи п ON с.номер_владельца=п.номер_пользователя AND п.возраст >= 30 
  LEFT JOIN переходы р 
      ON р.номер_ссылки = с.номер_ссылки  
          AND  р.номер_пользователя = $myid
          AND р.дата = $thisday  
  WHERE  р.номер_ссылки IS NULL 

  Ответить  
 
 автор: _Efim_   (08.05.2009 в 17:05)   письмо автору
 
   для: Trianon   (08.05.2009 в 15:35)
 

Спасибо, я попробую =)

  Ответить  
 
 автор: _Efim_   (10.05.2009 в 12:35)   письмо автору
 
   для: Trianon   (08.05.2009 в 15:35)
 

У меня этот запрос выполнялся минуты три..
Нельзя его никак оптимизировать ?

  Ответить  
 
 автор: Trianon   (10.05.2009 в 12:41)   письмо автору
 
   для: _Efim_   (10.05.2009 в 12:35)
 

таблицы большие, наверное.
может быть и можно. Может быть и нет.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования