2012-02-01 2 views
0

Как это сделать в mysql?mysql if statement how to

если tbl_comments.to это число, то присоединиться к tbl_users

если tbl_comments.to является ключевым игроком затем присоединиться со столом людей и отображение имен

если tbl_comments.to является ключевым команда затем присоединиться таблица команд и имена отображения

если tbl_comments.to является одним из ключевых лиги затем присоединиться tbl_sports

ответ

0

Как вы можете сказать, что tbl_comments.to есть, у вас есть еще один столбец, чтобы сохранить тип?

Или вам нужно присоединиться ко всем таблицам.

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