mysql选择从某些标准中选择的随机条目

时间:2018-02-17 13:19:55

标签: mysql

我希望从表中排序一个用户从来没有与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,或者我只能做一个查询?

2 个答案:

答案 0 :(得分:1)

您可以使用嵌套选择:

SELECT * FROM table WHERE note=0 and user not in (select user from table where note>0) ORDER BY rand() LIMIT 1

但是你应该真正使用用户的主要唯一索引

答案 1 :(得分:1)

您可以避免使用子查询来提高性能,如下所示:

SELECT * 
FROM YourTable 
GROUP BY name 
HAVING SUM(note)=0 ORDER BY rand() LIMIT 1;

这是SQL Fiddle DEMO