Запрос с оператором IF - PullRequest
       21

Запрос с оператором IF

0 голосов
/ 05 января 2012

У меня вопрос по поводу заявления MYSQL If. Мой запрос:

SELECT c.status, c.thumb, j.id, j.name, j.username, s.session_id, a.time, a.isactive, a.country, a.countrycode, a.city
FROM j16_users AS j 
JOIN j16_community_users AS c ON c.userid = j.id 
LEFT JOIN j16_session AS s ON s.userid = j.id 
LEFT JOIN j16_session AS s ON s.userid = j.id 
LEFT JOIN j16_x5_fastchat_users AS a ON a.userid = j.id 
WHERE j.id IN (62,66,2692)

Как добавить новый столбец: isonline с условием для вышеуказанного запроса:

IF(a.time > DATE_SUB(NOW(), INTERVAL 1 MINUTE), "1", "0") AS isonline

Спасибо!

Ответы [ 2 ]

1 голос
/ 05 января 2012
SELECT c.status, c.thumb, 
       j.id, j.name, 
       j.username, s.session_id, 
       a.time, a.isactive, 
       a.country, a.countrycode, a.city,
       IF(a.time > DATE_SUB(NOW(), INTERVAL 1 MINUTE), 1, 0) AS isOnline
FROM j16_users AS j 
     JOIN j16_community_users AS c ON c.userid = j.id 
     LEFT JOIN j16_session AS s ON s.userid = j.id 
     LEFT JOIN j16_session AS s ON s.userid = j.id 
     LEFT JOIN j16_x5_fastchat_users AS a ON a.userid = j.id 
WHERE j.id IN (62,66,2692)
1 голос
/ 05 января 2012

Просто добавьте его в список SELECT. Однако оператор CASE рекомендуется как более переносимый.

SELECT 
  c.status, 
  c.thumb, 
  j.id, 
  j.name, 
  j.username, 
  s.session_id, 
  a.time, 
  a.isactive, 
  a.country, 
  a.countrycode, 
  a.city,
  CASE WHEN a.time > DATE_SUB(NOW(), INTERVAL 1 MINUTE) THEN 1 ELSE 0 END AS isonline
FROM
  j16_users AS j 
  JOIN j16_community_users AS c ON c.userid = j.id 
  LEFT JOIN j16_session AS s ON s.userid = j.id 
  LEFT JOIN j16_session AS s ON s.userid = j.id 
  LEFT JOIN j16_x5_fastchat_users AS a ON a.userid = j.id 
WHERE 
  j.id IN (62,66,2692)

Поскольку вам просто нужно логическое значение 1 или 0, оператор также может быть записан без CASE или IF как:

 ... 
 a.countrycode, 
 a.city,
 (a.time > DATE_SUB(NOW(), INTERVAL 1 MINUTE)) AS isonline
 ...

и будет иметь тот же эффект.

...