SQL语句问题。假设我的迷你表中有以下内容。假设该表是“图像”。
ID | file_name |fruit_type |
================================
1 | ex.jpg | apple |
2 | am.png | apple |
3 | pl.jpeg | orange |
4 | e.png | orange |
5 | yep.png | apple |
行。所以当我打电话给这个时,我希望它能够拉出两张图片,每张图片应该是一个来自fruit_type的随机选择。所以苹果应该只用苹果挑选。橘子应该只用橙子挑选。应该没有两种类型的组合。
这是它崩溃的地方。假设我运行的代码是这样的:
$query="SELECT * FROM images WHERE fruit_type='apple'
OR fruit_type='orange' ORDER BY RAND() LIMIT 0,2";
这将返回两个随机选择,就像我想要的那样。但是,这会从该列中捕获苹果和橙子类型。
我一直在尝试识别一个允许它选择苹果或橙子的SQL语句,但从不同时选择苹果或橙子。我很短暂,所以我转向你们所有人。
答案 0 :(得分:0)
您可以创建两个查询,首先是苹果,第二个是橙子,然后选择随机苹果和随机橙色,然后使用UNION ALL
子句加入它们。
答案 1 :(得分:0)
以下内容可行,但从性能的角度来看,如果您的表变得庞大(数百万条记录),它将不是一个很好的选择。以下查询采用具有相同fruit_type但不包含匹配图像的所有图像组合(您不希望同一图像两次,是吗?)。
SELECT images1.*, images2.*
FROM images images1, images images2
WHERE images1.id != images2.id
AND images1.fruit_type = images2.fruit_type
ORDER BY RAND()
LIMIT 0,2
答案 2 :(得分:0)
由于您在MySQL中没有窗口函数,因此您必须即兴创作。这篇文章改编自this blog post by Quassnoi:
SELECT
distinct
@fi AS file_name,
fruit_type
FROM (
SELECT m.*
FROM (
SELECT @_f = NULL
) vars,
images m
ORDER BY
fruit_type, rand()
) mo
WHERE (CASE WHEN @_f IS NULL OR @_f <> fruit_type THEN @fi := file_name ELSE file_name END IS NOT NULL)
AND (@_f := fruit_type) IS NOT NULL