1

COUNTを使用してLIKEクエリに一致するすべてのレコードのカウントを取得するにはどうすればよいですか?

keywords次のように定義されたテーブルがあります

+------+-------+-----------------+
| id   | photo | keyword         |
+------+-------+-----------------+
| 3504 |   664 | 2013            |
| 3505 |   664 | bl elfring      |
| 3506 |   664 | indoor track    |
| 3507 |   664 | people          |
| 3508 |   664 | 1-5_it_0128.jpg |
+------+-------+-----------------+

部分的に次のようにphoto定義されます

+-----+-------------------+-------------+--------------+------------+
| ID  | name              | photo_width | photo_height | date_taken |
+-----+-------------------+-------------+--------------+------------+
| 760 | 12-8_mbb_0072.jpg |         425 |          600 | 2012-12-08 |
| 759 | 12-8_mbb_0071.jpg |         459 |          600 | 2012-12-08 |
| 758 | 12-8_mbb_0069.jpg |         457 |          600 | 2012-12-08 |
| 757 | 12-8_mbb_0057.jpg |         395 |          600 | 2012-12-08 |
| 756 | 12-8_mbb_0050.jpg |         800 |          468 | 2012-12-08 |
+-----+-------------------+-------------+--------------+------------+

keywords.photophotos.IDを参照keywords.keywordし、その画像に関連付けられたIPTCキーワードです。

特定のキーワードに関連付けられているすべての画像の数を取得したい

ここのところ、

SELECT COUNT(keywords.photo) AS keyword_count, keywords.keyword 
FROM keywords INNER JOIN photos ON keywords.photo = photos.ID
WHERE keywords.keyword LIKE '%nic%'

戻り値

+---------------+-------------+
| keyword_count | keyword     |
+---------------+-------------+
|            31 | nicole **** |
+---------------+-------------+

でも、

SELECT DISTINCT keyword
FROM keywords
WHERE keyword LIKE '%nic%'

戻り値

+----------------+
| keyword        |
+----------------+
| nicole ****    |
| nicole ******* |
| bonny **nic*   |
| nicole ******  |
+----------------+

2番目のクエリの結果を含むカウントフィールドを取得するにはどうすればよいですか?

4

2 に答える 2

3

私が正しく理解しているなら、あなたは与えられたキーワードに一致する写真の数が欲しいですか?この場合、次のGROUP BY句を使用できます。

SELECT
    COUNT(keywords.photo) AS keyword_count, keywords.keyword 
FROM
    keywords INNER JOIN photos ON keywords.photo = photos.ID
WHERE
    keywords.keyword LIKE '%nic%'
GROUP BY
    keywords.keyword

これにより、結果がkeywords.keyword列ごとにグループ化され、それぞれが使用された回数の合計数が示されます。この方法で一致/グループ化された「キーワード」は一意であることに注意してください。部分一致ではグループ化されません(つまり"bonny **nic*、とは異なりnicole ******ます)。

于 2013-01-08T18:06:34.277 に答える
2

一意のキーワードでグループ化する:

SELECT COUNT(keywords.photo) AS keyword_count, keywords.keyword 
FROM keywords INNER JOIN photos ON keywords.photo = photos.ID
WHERE keywords.keyword LIKE '%nic%'
GROUP BY keywords.keyword
于 2013-01-08T18:05:59.377 に答える