p としてテーブル ポスト、pt としてテーブル タグ、ptr としてテーブル タグリファレンスがあります。
tagsref には、投稿の ID とタグ テーブルが含まれます。
私は group_concat を使用し、group by 句を使用しませんでした。これは、条件で if 条件を使用して 1 つの行 (p.slug = 'once') のみをフィルター処理しているため、条件を追加したため、1 つの行のみが返されると想定しているためです。はい、そうでした。
問題は、まだ行がない場合に、null 値を持つ行を取得したことです。次のSQLでは、スラッグが「なし」の行がないため、最後の条件は結果をフェッチしません。結果はまったく得られませんが、NULL値を持つ行が1つ得られました。
SELECT p.name, p.slug, GROUP_CONCAT(pt.name) as catz
FROM post_tags pt, post_tagsref ptr, post p
WHERE p.id = ptr.tid AND ptr.cid = pt.id AND p.slug = 'none'
group by 句を使用することを提案し、group_by 集計関数は group by 句が指定されていなくても機能するが、結果は予測できない可能性があると述べました。
私はgroup byを使用し、働いています。まだ。
post
-----
id | name | slug
1 | sam | sam
2 | do do | do-do
post_tags
--------------
id | name | slug
1 | music | music
2 | movies | movies
3 | tv | tv
post_tagsref
------------
pid | pcid
1 | 2
1 | 1
2 | 1
上記がテーブル構造です。
行がまったくない場合、group_concat が 1 つの行を null 値で返すのはなぜですか?
このような質問の理由は、何が何であるかを確認するためです... :)
参照: