2013-09-25 1 views
-1

У меня есть следующие MySQL запросов:получение имя_поля из нескольких таблиц в зависимости от состояния

SELECT 
    u.ID, 
    u.StudentCode, 
    c.classname, 
    s.STUDENTNAME, 
    u.UserCode, 
    g.ForeName AS MessageSentBy, 
    u.Message, 
    u.ForTchrSname AS MessageSentTo, 
    DATE_FORMAT(u.datetime, '%d-%m-%y') AS datesent, 
    u.RecordStatus 
FROM 
    tblupdates u, 
    tblguardian g, 
    tblstudent s, 
    tblclass c 
WHERE u.UserCode = g.GuardianCode 
    AND u.StudentCode = s.STUDENTCODE 
    AND (
    YEAR(u.DateTime) = '2013' 
    AND MONTH(u.DateTime) = '09' 
) 
    AND u.RecordStatus = 'N' 
    AND c.classcode = s.classcode 
ORDER BY u.datetime DESC 

Результат этого запроса показан ниже: enter image description here

сейчас в моей tblupdates за год-2013 и месяц- 09 у меня есть следующие строки: enter image description here

Теперь в моем выше результате я получаю данные для id=138, но я хочу, чтобы отобразить all.The причины п ВЗ отображения других строк, что (usercode-30000,admin) они происходят в tblteacher, а не tblguardian .so теперь я хочу, что если usercode от tblguardian он показывает опекун имени, но если из tblteacher он показывает teachername, но показывает все rows.Tblteacher и tblupdates могут быть к которым присоединяются код учителя и пользовательский код соответственно.

Я пробовал следующий запрос, но он оленья кожа вернуть любую строку:

SELECT 
    u.ID, 
    u.StudentCode, 
    c.classname, 
    s.STUDENTNAME, 
    u.UserCode, 
    IF(
    u.usercode NOT IN (g.guardiancode), 
    t.teachername, 
    g.ForeName 
) AS MessageSentBy, 
    u.Message, 
    u.ForTchrSname AS MessageSentTo, 
    DATE_FORMAT(u.datetime, '%d-%m-%y') AS datesent, 
    u.RecordStatus 
FROM 
    tblupdates u, 
    tblguardian g, 
    tblstudent s, 
    tblclass c, 
    tblteacher t 
WHERE u.UserCode = g.GuardianCode 
    AND u.StudentCode = s.STUDENTCODE 
    AND t.teachercode = u.usercode 
    AND (
    YEAR(u.DateTime) = '2013' 
    AND MONTH(u.DateTime) = '09' 
) 
    AND u.RecordStatus = 'N' 
    AND c.classcode = s.classcode 
ORDER BY u.datetime DESC 

Пожалуйста, помогите мне

+0

Внешнее соединение должно сделать трюк, в mysql, слева, присоединиться к –

ответ

0

Попробуйте это с помощью CASE и я присоединился к вам таблицы с помощью LEFT присоединиться, так что может быть дубликатами У меня есть GROUP BY также по u.id, но бит путают для названия правой колонки, пожалуйста, поместите правую колонку в группу по

SELECT 
    u.ID, 
    u.StudentCode, 
    c.classname, 
    s.STUDENTNAME, 
    u.UserCode, 
    (CASE 
    WHEN u.usercode = t.teachercode THEN t.teachername 
    WHEN u.usercode = g.guardiancode THEN g.ForeName 
    ELSE END) AS MessageSentBy, 
    u.Message, 
    u.ForTchrSname AS MessageSentTo, 
    DATE_FORMAT(u.datetime, '%d-%m-%y') AS datesent, 
    u.RecordStatus 
FROM 
    tblupdates u 
    LEFT JOIN tblguardian g ON (u.UserCode = g.GuardianCode) 
    LEFT JOIN tblstudent s ON (u.StudentCode = s.STUDENTCODE) 
    LEFT JOIN tblclass c ON (c.classcode = s.classcode) 
    LEFT JOIN tblteacher t ON (t.teachercode = u.usercode) 
WHERE u.RecordStatus = 'N' 
AND (
    YEAR(u.DateTime) = '2013' 
    AND MONTH(u.DateTime) = '09' 
) 
GROUP BY u.id 
ORDER BY u.datetime DESC 
+0

thanx ... это сработало для меня. Но мы можем добиться того же путем небольшого запроса или другим способом. – rupinder18

+0

Соединения являются нашими лучшими друзьями, и я думаю, что мы не можем сократить этот запрос, у него есть только два условия с объединениями только –

+0

, и если мы хотим сделать автономную фильтрацию, будет ли она быстрой, чем это, или займет то же время – rupinder18

Смежные вопросы