2011-12-17 201 views
1

我想知道有人可以帮助我。MySQL - 使用LEFT JOIN返回一个随机记录

我想在我的网站上显示随机“民意调查”,我在我的数据库中有大约50个,我希望每次人重新加载页面时都显示一个不同的人。

要获得民意调查中,我使用下面的SQL查询....但这获取表中的第一个...我怎么能告诉它来获得一个随机的“民意调查”

SELECT * 
    FROM polls 
    LEFT JOIN pollanswers ON polls.pollID = pollanswers.pollID 
WHERE polls.pollID = 1 
ORDER By pollAnswerListing ASC 

非常感谢

回答

0

您必须将pollID改变一些随机数

polls.pollID = 1 

到例如

polls.pollID = 9 
+0

如果你在任何时候有50次民意调查,这可能是一个很好的解决方案,不多也不少。但是,如果稍微更少或更多,该怎么办?然后您需要首先查询数据库以查找有多少个数据库,然后在第二个查询中提供一个随机轮询。我会说ORDER BY RAND()是一个更好的方法。 – sbrattla 2011-12-17 15:58:26

3

使用ORDER BY RAND() LIMIT 1,并且可能删除WHERE子句,假设polls.pollID是您的主键。

SELECT * 
FROM polls 
LEFT JOIN pollanswers ON polls.pollID = pollanswers.pollID 
/*WHERE polls.pollID = 1*/ 
ORDER BY RAND() LIMIT 1 
+0

感谢您的回应...它没有工作,虽然 – BigJobbies 2011-12-17 12:45:47

+0

@BigJobbies哎呀,关键字'ORDER BY'上面缺少。本应该是'rand()limit 1' – 2011-12-17 12:52:28

+0

@BigJobbies:什么“没有工作”?这个建议似乎是正确的(在'订单'修正之后),那么你得到了什么? – 2011-12-17 12:54:31

0

生成1到50之间的随机数(假设你有50次投票) 并传递到你的MySQL查询作为PollId值而不是硬编码值1

var randomId= rand(5, 50); 

使用此randomId在您的查询

+0

你不能假设,'(SELECT COUNT(*)FROM polls)AS max' :) – 2011-12-17 14:00:02

+0

webarto:的确如此。但是在他提到的问题中,它差不多是50.我假设处理这个查询或网站的人将具有从数据库中读取计数的意义。答案只是关于mysql连接值。 – Shyju 2011-12-17 14:08:05

+0

你是对的,但整个查询都是错误的。干杯。 – 2011-12-17 14:15:45