_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)
так получаю список(по фильтру) и колич. пользователей входящих в категории.
прикрепляем колич. пользователей, кот. уже отравленно сообщение
если групировать по C.category_id результаты неверны.
по какому полю дать группировку?
-~{}~ 29.01.07 14:16:
спасибо за внимание. Справился сам.
были данные неправильные в базе. вот он и тянул не то что я ожидал.
-~{}~ 29.01.07 19:29:
еще 2 вопросика:
1)
как правильно достать по запросу любую запись, в кот. сущ. нужная (например 10), т.е. (10-20) или (20-10)
не слишком ли это будет НЕ ОПТИМИЗОРОВАННО?
и можно ли записать по сокращенней, может использовать условные операторы?
2) второй вопрос возникает из первого.
как тогда ставить еще всемозможные условия на LEFT JOIN-ы, т.е. подцеплять только согласно условию?
Если же условие ставитьв WHERE, то он жёстко (как при INNER JOIN) обрабатывает записи.
Например как (слева)заджойнить только за сегодняшную дату или любое др. условие?
Сущ. таблицы
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
по какому полю дать группировку?

-~{}~ 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"