У меня есть следующая таблица:
**id** **username** **activity** 1 user1 activity-like 2 user1 activity-share 3 user3 activity-like 4 user4 activity-like 5 user1 activity-share 6 user6 activity-like 8 user1 activity-share 9 user3 activity-like 10 user5 activity-share
(Примечание: нет id = 7)
Я пытаюсь использовать php–mysql для получения активности, сделанной пользователем1, и получить идентификатор. В этом случае активность имеет идентификатор (1, 2, 5 и 8).
$currentId = 5;
Я хочу получить следующие и предыдущие идентификаторы, если они существуют (в этом случае 2 и 8).
$fetch = mysql_query("SELECT * FROM `main` WHERE `username` = 'user1' AND id > '$id'"); if(mysql_num_rows($fetch) == 1){ while (){ } $result = $fetch['id']; }
Я не уверен, как написать запрос для этого.
Вы можете сделать что-то вроде этого:
Для следующего id,
SELECT id from tablename where username = 'user1' AND id > $currentId ORDER BY ID ASC LIMIT 1;
Для предыдущего id,
SELECT id from tablename where username = 'user1' AND id < $currentId ORDER BY ID DESC LIMIT 1;
Я думаю, вы можете использовать запрос union
как показано ниже:
(SELECT ID, USERNAME, ACTIVITY FROM MAIN WHERE username = 'user1' AND ID < '$id' ORDER BY ID DESC LIMIT 1) UNION (SELECT ID, USERNAME, ACTIVITY FROM MAIN WHERE username = 'user1' AND ID > '$id' ORDER BY ID ASC LIMIT 1);
Первый фрагмент запроса должен возвращать ID = 2
если он существует, а второй должен возвращать ID = 8
.