トリッキーな mysql select ステートメントを機能させようとしています - そして、燃えているノギンを冷やすために助けが必要です...そして、そこにいる MYSQL ヒーローの 1 人がこれを見て、それを巻き戻すと感じています。
目標: 特定のカテゴリに属さない特定のユーザーの曲を一覧表示する。
3 つのテーブル: : テーブル 1: 曲、UserID が割り当てられた多くのフィールド、および一意の SongID
表 2: カテゴリ、3 つ以上のフィールド、割り当てられた UserID と一意の CatID
表 3: リンカ、1 つまたは複数のカテゴリに曲をリストするための 1 対多。3 つのフィールド、一意の ID (インデックス)、SongID、CatID
以下は私を近づけます-しかし、他のカテゴリにまったく割り当てられていない、またはすでに別のカテゴリに割り当てられているユーザーの曲をリストしません(!=のおかげだと思います)。
SELECT DISTINCT song.SongName, song.UserID, song.SongID FROM song
JOIN linker ON song.SongID = linker.SongID
WHERE linker.CatID != 155 AND song.UserID =2
次に、これを試してみました。
SELECT DISTINCT song.SongName, song.UserID, song.SongID FROM song
LEFT JOIN linker ON song.SongID = linker.SongID
WHERE (linker.SongID IS NULL OR linker.CatID != 155) AND song.UserID =2
より近くなりますが、機能しません (既に割り当てられている曲を含む != のおかげです)。
特定のユーザーのカテゴリを追加して定義するだけなので、テーブル 2 を呼び出さなくても済むと思っていました。または、すべてのユーザーの曲を取得してから、特定の CatID で配列値の設定を解除することを考えていますが、これは必要ではないようです。シンプルなものが欠けているような気がしますか?絶対に変更する必要がある場合、テーブル構造は現時点では神聖ではありません。考えを共有してくれた人に感謝します。