Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сложный запрос с выборкой
 
 автор: DP   (06.10.2005 в 13:11)   письмо автору
 
 

Имеется три таблицы с примерно такой структурой (лишние поля не указаны):


Таблица 1:
userID    userName
1         userOne
2         userTwo
3         userThree

Таблица 2:
indexID    userID
1          1
2          1
3          3
4          2
5          1
6          2
7          2

Таблица 3:
indexID    userID
1          3
2          2
3          2
4          3
5          1
6          1
7          1


Нужно составить запрос, который бы выводил отсортированный список userName с результатом кол-ва соответствующих userID в Таблице 2, поделенное на кол-во соотвествующих userID в Таблице 3:


Результат:
name        result
userTwo     1.5
userOne     1
userThree   0.5


Т.е. примерно такой запрос:


SELECT t1.userName AS name, COUNT(t2.indexID) / COUNT(t3.indexID) AS result
FROM table1 AS t1, table2 AS t2, table3 AS t3
WHERE t2.userID = t1.userID ... t3.userID = t1.userID
GROUP BY name
ORDER BY result DESC
LIMIT 15


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

   
 
 автор: cheops   (06.10.2005 в 13:36)   письмо автору
 
   для: DP   (06.10.2005 в 13:11)
 

Нет в один запрос не получится... дело в том, что функция COUNT() относится к классу агрегатных функций - т.е. она регагирует на конструкцию GROUP BY... Если имеете дело с MySQL меньше 4.1.0, то выходом может послужить создание временных таблиц http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=278. Если версия выше можно воспользоваться вложенными запросами.
tbl2: 
userID    total
1          3 
2          3 
3          1

и
tbl3: 
userID    total
1          3 
2          2 
3          2

и оперирование уже с ними.

   
 
 автор: DP   (06.10.2005 в 15:22)   письмо автору
 
   для: cheops   (06.10.2005 в 13:36)
 

Спасибо огромное! Буду отталкиваться уже от этого.

Скорее всего, придется сделать оба варианта.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования