Как сделать выборку одним запросом ?

intelligent

Новичок
Как сделать выборку одним запросом ?

Есть таблицы вида:

Сводная: main - project_id, cat_id
Клиенты: client - id, title
Категории: cat - id, title
Проекты: project - id, client_id, title

Проект имеет одного клиента и может относиться к нескольким категориям.

как наиболее эффективно произвести выборку проектов, чтобы каждый проект (блок информации) содержал след. информацию (название проекта, клиент, список связанных категорий)

Написал я тут запрос, но он выбирает только одну категорию для проекта:

PHP:
SELECT project.id,
       project.title,
       cat.title as cat_title,
       cat.id as cat_id,
       client.title as client_title,
       client.id as client_id
FROM client,  project, cat, main
WHERE client.id=project.client_id AND
      main.project_id=project.id AND
      main.cat_id=cat.id
GROUP BY project.id
Есть задумка выборке приписать поле, которое содержит категории через разделитель (CONCAT_WS), реально ли ?
Может есть другие варианты ?

-~{}~ 12.03.06 22:32:

еще актуально.....не уж-то нет каких-нибудь мыслей ???
 

SelenIT

IT-лунатик :)
Простейший выход - заменить GROUP BY на ORDER BY, а "группировать" уже в скрипте:
PHP:
while($row = mysql_fetch_assoc($result)) {
   $project[$row['id']]['title'] = $row['title'];
   $project[$row['id']]['client'] = $row['client_title'];
   $project[$row['id']]['categories'][] = $row['cat_title'];
}
 

intelligent

Новичок
SelenIT
Спасибо, не плохой выход, но все-таки можно ли сделать подобное при помощи только БД ?
 
Сверху