我有一个MySQL表classifieds
,它有以下字段:
id
=主键,自动增量title
,desc
,.........,其他字段,featured
= int(1)
(1或0),但可以更改为true
/ false
,featured_start(date)
,featured_end(date)
我想在我的主页上一次显示一次分类。我的意思是,它不会使用AJAX动态旋转,而是每次刷新或重新加载(F5)。
有人可以给我一些关于如何编码公平的 MySQL查询以获得一次分类的功能的想法吗?公平地说,那个被分类的人不能比其他人显示太多次,当然featured_end
必须考虑到没有显示过期的分类广告。
答案 0 :(得分:1)
考虑featured_end
加入WHERE featured_end >= CURRENT_DATE
,即
SELECT *
FROM classifieds
WHERE (featured_end >= CURRENT_DATE)AND(featured = 1)
ORDER BY RAND()
LIMIT 1
答案 1 :(得分:1)
ORDER BY RAND() LIMIT 1
是抓取随机行的经典简单方法。但是,它不能很好地扩展到表中的大量行 - 它必须为表中的每一行运行RAND()
函数,然后对所有这些行进行排序(仅显示第一行)。 / p>
我建议阅读this useful article。
tl; dr版本:最好的数据库端解决方案很可能是:
SELECT `your_table`.*
FROM `your_table`
JOIN
(
SELECT CEIL(RAND() * (SELECT MAX(`id`) FROM `your_table`)) AS `id`
) AS `random_row` USING(`id`)
说真的,请仔细阅读该文章,这是我认为您会找到的最佳回答。
对于那些会提出主键中的空白会导致不准确这一事实的人:是的,他在我链接的帖子中涵盖了这一点。
答案 2 :(得分:0)
您可以尝试使用“RAND
”功能 -
SELECT classifieds.*
FROM classifieds
ORDER BY RAND()
LIMIT 1