1

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

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

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

我希望我已经清楚了。

谢谢你的帮助

保罗

4

4 回答 4

1

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

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

目前还有另外两个有效的选项:Mohammad
建议的选项是使用子句而不是实际上不太理想的子句:HAVINGWHERE

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

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

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

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

实际上是最好的选择。

于 2009-10-02T07:45:13.427 回答
0
select title,series_number from programme_table group by title,series_number having title like '$letter%';
于 2009-10-02T04:33:44.933 回答
0

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

SELECT DISTINCT title, series FROM programme_table WHERE title LIKE '$letter%'
于 2009-10-02T04:54:41.180 回答
0

嘿,谢谢你,但我有大约 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.MinPid

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

于 2009-10-03T13:24:05.900 回答