2012-02-01 20 views
0

これをmysqlでどのように記述すればよいですか?mysqlのif文how to

tbl_comments.toが数であるならば、tbl_comments.toは、その後、テーブル名と表示名で参加

プレーヤーのキーである場合tbl_comments.toは、チームのキーである場合、その後に参加tbl_users

に参加表チームと

tbl_comments.toリーグの鍵は、その後どのようにあなたはタイプを保存するために別の列を持っているか、tbl_comments.toが何であるかを伝えることができtbl_sports

答えて

0

に参加している場合は、表示名?

または、すべてのテーブルに参加する必要があります。

SELECT * FROM tbl_comments c 
LEFT JION ON tbl_users u ON c.to = u.id 
LEFT JION ON tbl_persons p ON c.to = p.id 
LEFT JION ON tbl_teams t ON c.to = t.id 
LEFT JION ON tbl_sports s ON c.to = s.id 
1

いくつかの可能なテーブルのいずれかを参照する列を有するの実施は、多型の関連呼ばれます。これは、リレーショナルデータベース設計のルールを破るハックです。

SQLは、特定の行で見つかった値に応じて、異なるテーブルへの条件付き結合をサポートしていません。すべてのテーブルは、データベースがクエリを解析するときに認識されている必要があります。これらのテーブルの正確に一つの試合が含まれている必要がありますので、あなたが外ですべてそれらのテーブルに参加することができ

は、加入:

SELECT c.*, COALESCE(u.name, p.name, t.name, s.name) AS name 
FROM tbl_comments AS c 
LEFT OUTER JOIN tbl_users u ON c.to = u.id AND c.type = 'number' 
LEFT OUTER JOIN tbl_persons p ON c.to = p.id AND c.type = 'player' 
LEFT OUTER JOIN tbl_teams t ON c.to = t.id AND c.type = 'team' 
LEFT OUTER JOIN tbl_sports s ON c.to = s.id AND c.type = 'league'; 

それとも、これらのテーブルのいずれかに参加していますが知っている行に制限することができ一致:

SELECT c.*, u.name 
FROM tbl_comments AS c 
INNER JOIN tbl_users u ON c.to = u.id 
WHERE c.type = 'number' 
    UNION ALL 
SELECT c.*, p.name 
FROM tbl_comments AS c 
INNER JOIN tbl_persons u ON c.to = p.id 
WHERE c.type = 'player' 
    UNION ALL 
SELECT c.*, t.name 
FROM tbl_comments AS c 
INNER JOIN tbl_teams t ON c.to = t.id 
WHERE c.type = 'team' 
    UNION ALL 
SELECT c.*, s.name 
FROM tbl_comments AS c 
INNER JOIN tbl_sports s ON c.to = s.id 
WHERE c.type = 'league' 
+0

私はこれを試してみます。ありがとう – Jetoox