имею 2-ве таблицы:
users:
id score
1 4
2 6
3 11
4 21
levels:
lvl value
1 0
2 5
3 10
4 20
Как рациональнее получить 1 массив вида (LEFT JOIN не пойму как реально применить для диапазона)
(в SQL особо не силён)
Форум → Программирование → PHP для идиотов → Выборка пользователя + уровень
Страницы: ← Следующая страница →
Окт. 31, 2010, 4:01 п.п., спустя 21 минуту 17 секунд
Окт. 31, 2010, 4:18 п.п., спустя 16 минут 32 секунды
id score lvl
1 4 1
2 6 2
3 11 3
4 21 4
5 3 1
6 12 3
n
Окт. 31, 2010, 4:42 п.п., спустя 24 минуты 1 секунду
Окт. 31, 2010, 9:11 п.п., спустя 4 часа 28 минут 39 секунд
Окт. 31, 2010, 9:54 п.п., спустя 8 минут 25 секунд
Окт. 31, 2010, 9:58 п.п., спустя 4 минуты 13 секунд
Окт. 31, 2010, 10:09 п.п., спустя 11 минут 14 секунд
SELECT DISTINCT u.id as id, u.score as score, l.1v1 as 1v1
FROM
users u INNER JOIN levels l
WHERE
u.score >= l.value AND
u.score <= (IF(l.value = 0, 5, l.value) * 2)
GROUP BY u.id, u.score
Окт. 31, 2010, 10:13 п.п., спустя 4 минуты 26 секунд
Окт. 31, 2010, 10:19 п.п., спустя 5 минут 22 секунды
SELECT u.id as id, u.score as score, l1.1v1 as 1v1
FROM
users u INNER JOIN levels l1
WHERE
u.score >= l1.value AND u.score <= (SELECT l2.value FROM levels l2 WHERE l1.value < l2.value ORDER BY l2.value LIMIT 1)
GROUP BY u.id, u.score
Окт. 31, 2010, 10:21 п.п., спустя 2 минуты 39 секунд
Окт. 31, 2010, 10:26 п.п., спустя 4 минуты 23 секунды
SELECT u.id as id, u.score as score, l1.1v1 as 1v1
FROM
users u INNER JOIN levels l1
WHERE
u.score >= l1.value AND u.score <= IFNULL((SELECT l2.value FROM levels l2 WHERE l1.value < l2.value ORDER BY l2.value LIMIT 1), l1.value + 10)
GROUP BY u.id, u.score
Профи обосрались? ))))
Страницы: ← Следующая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!