2015-09-07 3 views
1

У меня есть эта таблица в MySQL под названием safespotMySQL-запрос другое состояние таблицы PHP

+---------+---------------+ 
| term_id | userid | safe | 
+---------+--------|------+ 
|  1 | 1  | large number, unix timestamp here 
|  1 | 2  | large number, unix timestamp here 
|  1 | 3  | large number, unix timestamp here 
|  1 | 4  | large number, unix timestamp here 
+---------+--------+ 

И это таблица users:

+----+-------------+-------------+ 
| id | userid | cash  | 
+----+-------------+-------------+ 
| 1 |  1  | 100000 | 
| 2 |  2  | 100000 | 
| 3 |  3  | 100000 | 
+----+-------------+-------------+ 

как я могу сделать что-то вроде

SELECT * FROM `users` where `userid`=1 and `cash`>= 1000 and " userid do not exist in table safespot" or "if the user exists in the safestop table, check if the current timestamp is higher than the safe colum) 

Так что в основном выполняйте запрос, который также возвращал бы его, если userid не существует в таблице safespot, или если это так, эта метка времени выше safe_value.

ответ

0
SELECT * FROM users u 
LEFT JOIN safespot s ON s.userid = u.userid 
WHERE 
    u.userid = 1 
    AND u.cash = 1000 
    AND (s.userid IS NULL OR s.safe > UNIX_TIMESTAMP()) 

Это возвращает пользователей, где

  • там нет входа в safespot для данного идентификатора пользователя или
  • есть запись в safespot с va lue safe больше текущей метки времени.
0
SELECT * FROM `users` WHERE `userid`=1 AND `cash`>= 1000 AND (userid NOT IN (
     SELECT DISTINCT userid FROM safespot 
    ) OR (userid IN (
     SELECT DISTINCT userid FROM safespot WHERE safe < UNIX_TIMESTAMP() 
    ) 
) 
+0

но у него также должно быть условие, что оно существует в другой таблице, оно должно проверять безопасное значение, чтобы оно было лучше, чем текущая временная метка? – maria

+1

Прошу прощения, я обновил свой ответ ;-) –

0

Использование WHERE NOT EXISTS как

SELECT u.* FROM `users` u 
where u.`userid`=1 
and u.`cash` >= 1000 
and (NOT EXISTS (select 1 from safespot where userid <> u.userid) 
or EXISTS (select 1 from safestop where userid = u.userid and safe < CURRENT_TIMESTAMP)); 
+0

, но он также должен иметь условие, что он существует в другой таблице, он должен проверять безопасное значение, чтобы оно было лучше, чем текущая временная метка? – maria

+1

@maria, см. Редактирование в ответ, если это помогает. Вам просто нужно добавить другое условие. – Rahul

Смежные вопросы