- Код: Выделить всё
users
------
id
username
- Код: Выделить всё
evaluations
-------------
id
user_id
moderator_id
evaluation_type_id
- Код: Выделить всё
evaluation_types
-------------------
id
description
А смысл таков:
Мне нужно выбрать все содержимое таблицы evaluations. Естественно поля user_id, moderator_id, evaluation_type_id нужно заменить значениями из связанных таблиц, т.е. итоговая таблица должна состоять из следующих полей:
- Код: Выделить всё
result table
-------------
evaluations.id
users.username AS User
users.username AS Moderator
evaluation_types.description
На текущий момент я это делаю в два этапа. На первом этапе я получаю таблицу вида
- Код: Выделить всё
result table
-------------
evaluations.id
users.id AS User
evaluations.moderator_id
evaluation_types.description
с помощью запроса:
- Код: Выделить всё
SELECT `evaluations`.`id`, `users`.`username` AS `User`, `evaluation_types`.`description`, `evaluations`.`moderator_id` AS `moderator`
FROM `evaluations`, `users`, `evaluation_types`
WHERE `evaluations`.`user_id`=`users`.`id`
AND `evaluations`.`evaluation_type_id`=`evaluation_types`.`id`
AND `users`.`id`='".request("user_id")."';
На втором этапе, я в цикле прохожу по всей таблице и для каждой строки делаю отдельный запрос:
- Код: Выделить всё
SELECT `username` FROM `users` WHERE `id`=".$evaluations[$i]["moderator"]
Как вы заметили все делается в два шага, что не есть гуд, так как я уверен это решается средствами самой БД. Два шага проходят потому что не происходит выборка имени модератора, потому что я не знаю как это сделать. Дело в том что и User и Moderator находятся в одной таблице. Это значит если я напишу условие следующего вида:
- Код: Выделить всё
WHERE `evaluations`.`user_id`=`users`.`id`
AND `evaluations`.`moderator_id`=`users`.`id`
AND `evaluations`.`evaluation_type_id`=`evaluation_types`.`id`
AND `users`.`id`='".request("user_id")."';
Выборка будет только тогда, когда User и Moderator будут одинаковы.
Вот я и ломаю голову над тем, как составить такой селект, чтоб база мне вернула имя модератора в любом случае.
Я буду рад любым предложениям.