1

1 つの番組に必要なすべての情報が 1 つのテーブルにまとめられた番組リスト データベースがあります (番組とエピソードを個別に分割する必要がありました)。特定の番組には複数のエピソードがあるため、メイン ページに昇順および選択された文字のタイトル名。これで基本的なクエリの実行方法はわかりましたが、これが私が知っているすべてです

SELECT DISTINCT title FROM programme_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

現在、他に 2 つの有効なオプションがあります。Mohammad
によって提案されたオプションは、句の代わりに句を使用することですが、これは実際にはあまり最適ではありません。HAVINGWHERE

このWHERE句は、レコードを制限するために使用され、使用するインデックスとテーブルを決定するためにクエリ オプティマイザーによっても使用されます。HAVINGは最終結果セットの「フィルタ」であり、 および の後に適用されるORDER BYためGROUP BY、MySQL はこれを使用してクエリを最適化できません。
そのHAVINGため、最適ではないため、「WHERE」を使用して結果を取得できない場合にのみ使用する必要があります。

quosooDISTINCTは、キーワードがクエリ内のリストされたすべての列に対して有効であることを指摘しています。これは事実ですが、一般的には推奨されません(パフォーマンスの違いはありません*特定のケースではパフォーマンスの違いがあります***)**。ただし、MySQL オプティマイザは両方に対して同じクエリを吐き出すため、実際のパフォーマンスの違いはありません。

更新 MySQL は両方のクエリに同じ最適化を適用しますが、実際には違いがあります。句DISTINCTと組み合わせて使用​​するとLIMIT、MySQL は十分な一意の行を見つけるとすぐに停止します。それで

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

実際には最良の選択肢です。

于 2009-10-02T07:45:13.427 に答える
0

DISTINCTキーワードは列のリストに対して実際に機能するため、シリーズをクエリに追加するだけで、一連の一意のタイトル、シリーズの組み合わせが返されるはずです。

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

ありがとうございますが、同じシリーズで約 1000 のエントリがあるため、シリーズを選び出し、約 999 のプログラムを役に立たず表示しません。

しかし、私はそれをユニークにしてシリーズ番号を表示することを知りました

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

うまくいけば、それは将来誰にも役立ちます。返信に感謝します:)

于 2009-10-03T13:24:05.900 に答える
0
select title,series_number from programme_table group by title,series_number having title like '$letter%';
于 2009-10-02T04:33:44.933 に答える