2013-08-01 3 views
0

У меня есть две таблицы, ir1_police есть сообщения, сообщаемые администратору. ir1_police_flag, администратор может отмечать репортеров от 1 до 2. (1 означает, что средняя 2 означает низкий, а ничто не означает высокий приоритет).Выберите два стола и поставили приоритет заказа

Если кто-то попытается сообщить что-то, что не является реальным. Администратор отметит это как 1 или 2. Итак, я бы составил список отчетов, который показывает первый высокий приоритет, второй средний и, наконец, низкий.

Я использую инструкцию mysql, но есть проблема. если ничего не было ir1_police_report ничего не будет показано. или, если они существуют, только показывают, что они находятся на ir_police_flags.

Я понятия не имею, чтобы выбрать их, если запись не существует на ir1_police_flags

SELECT * FROM ir1_police 
JOIN ir1_police_flags on ir1_police_flags.uid = `ir1_police.uid 
WHERE 
ir1_police.status=0 AND ir1_police.parent_id=0 
ORDER BY ir1_police.time DESC 
+0

'ORDER BY ir1_police_flags.flag ASC, irw_police.time DESC' – Mike

+0

Проблема в том, что в ir1_police_flags ничего не было показано, но мне нужно показать все, что должно быть показано для ir1_police. также если было что-то на ir1_police_flags показать рядом с идентификатором пользователя id –

+0

Также в дополнение к комментарию @Mike используйте левое соединение, если нет необходимости записывать в ir1_police_flags для наивысшего приоритета – Wirus

ответ

0

Заменить JOIN с LEFT JOIN. Первый выбирает строки из таблиц, в которых встречается совпадение, тогда как последний выбирает все строки из первой таблицы, даже если в другой таблице нет совпадений.

Затем вы можете добавить второе поле в ORDER BY:

SELECT * FROM ir1_police 
LEFT JOIN ir1_police_flags ON ir1_police_flags.uid = ir1_police.uid 
WHERE ir1_police.status=0 AND ir1_police.parent_id=0 
ORDER BY 
    ir1_police_flags.flag ASC, 
    ir1_police.time DESC 

Обратите внимание на LEFT JOIN дает результаты, где все ir1_police_flags поля «s являются NULL, где нет матч в этой таблице. Это прекрасно в вашем случае, потому что NULL считается меньше любого значения, что касается ORDER BY.


Ваше приложение может оправдать эту структуру, но вы должны спросить себя, является ли этот флаг не должен быть только один столбец таблицы ir1_police в целом.

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