MySQL SELECT DISTINCT正在输出重复项

时间:2011-11-24 00:39:30

标签: php mysql

此查询设置为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

知道为什么会输出重复项吗?

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()对于大型表来说是低效的,请注意(但我们也喜欢它)。