此查询设置为SELECT DISTINCT。但是,我得到重复。它应该显示两个随机页面标题/图像:
SELECT DISTINCT
`$page_type`.title AS title,
page_images.image_loc AS images
FROM `$page_type`, page_images
WHERE page_images.url_title = `$page_type`.url_title AND
`$page_type`.url_title != '$spot'
ORDER BY RAND() LIMIT 2
知道为什么会输出重复项吗?
答案 0 :(得分:1)
通常当看起来SELECT DISTINCT返回重复项时,看起来相同的行之间存在细微差别(因为空格或者因为编码问题,例如组合对)。
答案 1 :(得分:0)
在不知道表格内容或看到输出的情况下,很难看出复制的来源。例如,您可以拥有唯一的url_titles,但碰巧有不同url_titles的标题相同。 (我假设你没有拼写错误,并且在第二行中的意思是'url_title'而不是'title'。)
要以不同的方式来查询(并消除重复的标题),您可以重构查询以进行嵌套,并且为了清晰度和效率而看起来像这样,看看你得到了什么。我认为它可以解决你的问题的症状。子查询为您提供唯一标题,主查询为您配对图像。
SELECT
`$page_type`.title AS title,
page_images.image_loc AS images
FROM `$page_type`, page_images
WHERE page_images.url_title = `$page_type`.url_title AND
`$page_type`.title IN
(SELECT DISTINCT
`$page_type`.title
FROM `$page_type`
WHERE `$page_type`.url_title != '$spot'
ORDER BY RAND() LIMIT 2)
以这种方式执行子查询会消除在表连接上运行的RAND()。一般来说ORDER BY RAND()对于大型表来说是低效的,请注意(但我们也喜欢它)。