【问题标题】:Mysql Unique QueryMysql唯一查询
【发布时间】:2009-10-02 04:30:14
【问题描述】:

我有一个节目列表数据库,其中一个节目所需的所有信息都打包到一张表中(我应该将节目和剧集拆分成自己的)现在因为任何给定节目都有多个剧集,所以我希望显示主页仅使用升序和选定字母的标题名称。现在我知道如何进行基本查询了,但这就是我所知道的全部

SELECT DISTINCT title FROM program_table WHERE title LIKE '$letter%'

我知道我会使用它。但是我正在使用动态图像加载,它需要一个序列号才能完整地返回该图像,所以我如何让标题与众不同,同时还从该标题加载序列号?

我希望我已经清楚了。

感谢您的帮助

保罗

【问题讨论】:

    标签: php mysql unique distinct


    【解决方案1】:

    您可以将DISTINCT 关键字替换为GROUP BY 子句。

    SELECT
      title 
    , series_number
    FROM 
      programme_table 
    WHERE title LIKE '$letter%'
    GROUP BY 
      title
    , series_number
    

    目前还有两个其他有效选项:
    Mohammad 建议的选项是使用 HAVING 子句而不是 WHERE 子句,这实际上不太理想:

    WHERE 子句用于限制记录,也被查询优化器用来确定要使用哪些索引和表。 HAVING 是对最终结果集的“过滤器”,在 ORDER BYGROUP BY 之后应用,因此 MySQL 无法使用它来优化查询。
    所以HAVING 不是那么理想,你应该只在不能使用 'WHERE' 来获得结果时才使用它。

    quosoo 指出DISTINCT 关键字对查询中列出的所有列都有效。确实如此,但一般人不推荐它没有性能差异 *在某些特定情况下存在性能差异***)**。然而,MySQL 优化器为两者输出相同的查询,因此没有实际的性能差异。

    更新 虽然 MySQL 确实对两个查询应用了相同的优化,但实际上存在差异:当 DISTINCTLIMIT 子句结合使用时,MySQL 一旦找到足够的唯一行就会停止。所以

    SELECT DISTINCT
      title 
    , series_number
    FROM 
      programme_table 
    WHERE 
      title LIKE '$letter%'
    

    其实是最好的选择。

    【讨论】:

      【解决方案2】:
      select title,series_number from programme_table group by title,series_number having title like '$letter%';
      

      【讨论】:

        【解决方案3】:

        DISTINCT 关键字实际上适用于列列表,因此如果您只是将系列添加到查询中,它应该返回一组唯一的标题、系列组合:

        SELECT DISTINCT title, series FROM programme_table WHERE title LIKE '$letter%'
        

        【讨论】:

          【解决方案4】:

          嘿,谢谢你,但我有大约 1000 个相同系列的条目,因此它会单独列出该系列以及使大约 999 个程序无用且不显示。

          然而我发现让它独一无二并显示序列号

          SELECT * FROM 4 a INNER JOIN (SELECT title, MIN(series) A​​S MinPid FROM 4 WHERE title LIKE '$letter%' GROUP BY title) b ON a.title = b.title AND a.series = b。最小PID

          希望它对将来的任何人有所帮助,并感谢您的回复:)

          【讨论】:

            猜你喜欢
            • 2013-02-04
            • 2011-05-08
            • 1970-01-01
            • 1970-01-01
            • 2014-03-25
            • 2010-11-26
            • 1970-01-01
            • 2020-08-04
            • 2021-12-02
            相关资源
            最近更新 更多