在一个查询中获取显式值和随机值


get explicit value and random values in one query

是否可以从同一个表中获得一个特定值(如ID=5),除此之外,还可以获得两个或三个其他随机值?

这是我的查询:

SELECT name, solution, MAX( solution ) 
FROM tracks
WHERE id !=5
GROUP BY name
ORDER BY RAND( ) 
LIMIT 0 , 30  

我想做的事:
我有一个测验,我需要从数据库中得到三个答案。在我的第一个查询中,我得到了实际的答案,在第二个(上面的查询)中,我获得了另外两个不是实际答案的答案(ID!=)。

问题是,在我的表中,有4个值是相同的,它们有相同的名称,所以如果我的实际答案是ID=5,那么上面的查询可能会选择9的ID(它与ID=5的名称相同)。

我该如何避免这种情况?

谢谢!

也许您可以在where子句中添加一个子查询,以查找所有不是id并且没有相同解决方案名称的解决方案:

SELECT name, solution, MAX( solution ) 
FROM tracks
WHERE id !=5
--check that the id is not in the subquery and the name doesnt match:
AND id not in (select id from tracks t where id!=5 and t.name <> name)
GROUP BY name
ORDER BY RAND( ) 
LIMIT 0 , 30  

随机结果是随机的。如果你想确保你不会得到与答案同名的结果,你必须按名称进行筛选。

SELECT name, solution, MAX(solution) 
FROM tracks
WHERE id != 5 AND name != (SELECT name FROM tracks WHERE id = 5)
GROUP BY name
ORDER BY RAND() 
LIMIT 0 , 30  

是的,这是可能的。使用UNION。(此处为sqlfiddle)

SELECT * FROM ( (
   SELECT id, name, max(solution) as solution
   FROM tracks
   WHERE id = 5
   GROUP BY name
   LIMIT 0, 1
   )
   UNION (
   SELECT id, name, solution
   FROM tracks
   WHERE id != 5
   GROUP BY name
)) tmp ORDER BY RAND() LIMIT 0, 3