SQL, основанный на вычислении разницы по меткам времени, включенном в несколько таблиц с несколькими условиями - MySQL - PullRequest
1 голос
/ 16 апреля 2011

Структура таблицы и пример данных

Wall_Update

   [INT         VARCHAR       VARCHAR         TIMESTAMP               TinyText]   
   pid [pk] |  CreatedBy  |   RepliedBy   |     Time               |     Text    

   1        |   sourav    |     sachin    |   2011-04-09 21:26:01  |      Hi

Друзья

  UID  |    fUID

sourav |   sachin  
sachin |   sourav

Мне нужно получить PID для всех этих сообщений, которыебыл создан SOURAV или другом SOURAV, и время должно быть не более 3 дней!

Итак, я попробовал 2 запроса [и оба не удаются]

select pid,`Text`,CreatedBy,Time,RepliedBy from WALL_UPDATE where CreatedBy in 
  (select FUID from friends where UID='sourav') or CreatedBy='sourav' and 
    TIMESTAMPDIFF (DAY , Time,CURRENT_TIMESTAMP)<=3 order by PID desc

SELECT WU.pid,WU.Text,MN.NameF,WU.Time,WU.CreatedBy FROM wall_update WU,main MN WHERE
  WU.CreatedBy in (select FUID from FRIENDS where UID='sourav') or
  WU.CreatedBy='sourav' and MN.uid=WU.createdBy and 
     TIMESTAMPDIFF (DAY , WU.time,CURRENT_TIMESTAMP ) <3 group by WU.pid

[оба возвращают все PID, созданныеSOURAV или друг SOURAV]

1 Ответ

1 голос
/ 16 апреля 2011

попробуйте

выберите * из WALL_UPDATE, где (CreatedBy IN (выберите fuid из друзей, где uid = 'sourav') или CreatedBy = 'sourav') и TIMESTAMPDIFF (DAY, Time, now ()) <= 3 <br>упорядочить по pid desc

использовать основной идентификатор, чтобы ссылаться на друга, а не на имя пользователя. Это создаст дубликат

...