Я хочу сортировать одного пользователя из таблицы, у которого никогда не было заметки, отличной от 0, а затем обновить запись, а затем вставить новую строку
user note
12 1
23 0
88 0
45 0
12 0
23 0
12 0
88 2
сортировать пользователя, кроме пользователя 12 и пользователя 88, потому что у них уже есть заметка где-то где-то вроде
SELECT * FROM table WHERE note=0 ORDER BY rand() LIMIT 1
проблема в том, что у меня много дубликатов пользователей, поэтому я не знаю, как это исключить... пусть говорят, что я случайно выбираю пользователя 23, таблица должна стать
user note
12 1
23 0
88 0
45 0
12 0
23 X <--- mark the random user choosen
12 0
88 2
23 0 <--- add a new line
в следующем случайном выбрать только число 45 будет доступно, потому что у другого пользователя есть что-то примечание! = 0
для этого последнего запроса я должен сделать 2 запроса UPDATE, затем INSERT или я могу сделать только один запрос?
Вы можете избежать подзапросов для повышения производительности и выполните следующие действия:
SELECT *
FROM YourTable
GROUP BY name
HAVING SUM(note)=0 ORDER BY rand() LIMIT 1;
Вы можете использовать вложенный выбор:
SELECT * FROM table WHERE note=0 and user not in (select user from table where note>0) ORDER BY rand() LIMIT 1
однако u действительно должен использовать первичный уникальный индекс для пользователей