我有一个节目列表数据库,其中将一个节目所需的所有信息打包到一个表中(我应该将节目和剧集拆分成它们自己的)现在由于任何给定节目都有多个剧集,我希望显示主页只有标题名称在升序和选择的字母中。现在我知道如何进行基本查询,但这就是我所知道的
SELECT DISTINCT title FROM programme_table WHERE title LIKE '$letter%'
我知道我在用它。但是我使用的是动态图像加载,它需要一个序列号才能完整返回该图像,那么我如何才能让标题与众不同,同时从该标题加载序列号呢?
我希望我已经说清楚了。
感谢您的帮助
保罗
最佳答案
您可以用 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 BY
和GROUP BY
之后,所以MySQL不能用它来优化查询。
所以 HAVING
不是最佳选择,您应该只在无法使用“WHERE”获得结果时才使用它。
quosoo指出 DISTINCT
关键字对查询中列出的所有列均有效。这是事实,但通常人们不推荐它(没有性能差异 *在某些特定情况下会有性能差异***)**。然而,MySQL 优化器为两者吐出相同的查询,因此没有实际的性能差异。
更新
尽管 MySQL 确实对这两个查询应用了相同的优化,但实际上还是有区别的:当 DISTINCT
与 LIMIT
子句结合使用时,MySQL 会在找到足够的条件时立即停止独特的行。所以
SELECT DISTINCT
title
, series_number
FROM
programme_table
WHERE
title LIKE '$letter%'
实际上是最好的选择。
关于php - Mysql唯一查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1507733/