2011-04-12 37 views
0

请有人帮我解决这个问题的正确语法。带条件的mysql rand

我有,table1

id, int 
on, tinyint - this can be 0 or 1 
name, varchar(2000) 

从这个我想获得具有on设置为1

我应该使用什么查询10个随机id/name

+0

错误是由“上”不是一个可以接受的列名称的MySQL我觉得...(惊讶没有人发现了!) – David19801 2011-04-12 09:45:37

+0

没关系。你应该使用反引号来分隔你的字段名称。既然你没有向我们展示你到目前为止所做的尝试,我们无法猜测你没有这样做。 – 2011-04-12 09:48:04

回答

4
SELECT id, name FROM table1 WHERE `on` = 1 ORDER BY RAND() LIMIT 0,10; 
+0

啊!我错过了极限,而且mysql也不喜欢名为'on'的列。谢谢! – David19801 2011-04-12 09:41:47

+0

@MRW:在WHERE = 1上使用反引号,因为on是关键字 – Marco 2011-04-12 09:50:43

+0

什么是反引号?并且是他们在任何地方的不良关键工作清单? – David19801 2011-04-12 09:56:28

2

这应该工作:

SELECT id,name FROM table1 
WHERE `on`=1 
ORDER BY RAND() 
LIMIT 0,10 

编辑:如指出,在列可能导致不反引号语法错误

+0

你忘了条件。 – 2011-04-12 09:38:16

+0

@Tomalak Geret'kal:谢谢 – Marco 2011-04-12 09:39:11

+0

他正在寻找10个空间限制 - 否则是! – MRW 2011-04-12 09:40:01

2

试试这个:

SELECT id,name FROM table1 WHERE `on`=1 ORDER BY RAND() LIMIT 0,10 
+0

你忘记了结果数量的限制。 – 2011-04-12 09:41:48

+0

谢谢,编辑:) – 2011-04-12 09:42:57

0
SELECT `id`, `name` FROM `table1` 
WHERE `on` = 1 
ORDER BY RAND() 
LIMIT 0,10 

使用反引号分隔字段名称。在这种情况下,您实际上WHERE条件,因为“ON”是关键字。