нужна помошь по запросу

_Leonchik_

Новичок
нужна помошь по запросу

Сущ. таблицы

Filter(id_f, category_id, user_id)
Category(category_id, name)
Users(user_id, category_id, name_user)
Message(msg_id, send_id, recip_id)


Цель:
получить список только тех категорий, кот. присутствуют в таб. Filter + колич. пользователей в данных категориях + колич. пользователей с кот. я общался из категории.

конечный результат:
Category_name (CountSend, CountUser)
  • name_1 (5, 10)
    name_2 (5, 20)
    name_3 (5, 30)

так получаю список(по фильтру) и колич. пользователей входящих в категории.
PHP:
SELECT C.category_id, C.name, count(U.category_id) as CountUser
FROM `Category` AS C
INNER JOIN `Filter` AS F USING(category_id)
LEFT JOIN `users` AS U USING(category_id)
WHERE F.user_id = ?
GROUP BY C.category_id
ORDER BY C.category_id ASC
прикрепляем колич. пользователей, кот. уже отравленно сообщение
PHP:
SELECT C.category_id, C.name, count(U.category_id) as CountUser, 
count(msg_id) as CountSend
FROM `Category` AS C
INNER JOIN `Filter` AS F USING(category_id)  // только по фильтру
LEFT JOIN `users` AS U USING(category_id)   //общ. колич.
LEFT JOIN `Message` AS M ON U.user_id = M.send_id // колич. отправленных
WHERE F.user_id = ?   // для опред. юзера
GROUP BY C.category_id
если групировать по C.category_id результаты неверны.
по какому полю дать группировку?:confused:

-~{}~ 29.01.07 14:16:

спасибо за внимание. Справился сам.
были данные неправильные в базе. вот он и тянул не то что я ожидал.

-~{}~ 29.01.07 19:29:

еще 2 вопросика:
1)
как правильно достать по запросу любую запись, в кот. сущ. нужная (например 10), т.е. (10-20) или (20-10)
PHP:
//остальной код
LEFT JOIN `Message` AS M ON (U.user_id = M.send_id and M.send_id=10) OR (U.user_id = M.recip_id and M.recip_id=10) //колич. отправленных
// остальной код
не слишком ли это будет НЕ ОПТИМИЗОРОВАННО?
и можно ли записать по сокращенней, может использовать условные операторы?
2) второй вопрос возникает из первого.
как тогда ставить еще всемозможные условия на LEFT JOIN-ы, т.е. подцеплять только согласно условию?
Если же условие ставитьв WHERE, то он жёстко (как при INNER JOIN) обрабатывает записи.
PHP:
WHERE F.user_id = ? AND M.date = "date" // ваще тянет только те кот. имеют значение "date"
Например как (слева)заджойнить только за сегодняшную дату или любое др. условие?
 
Сверху