пятница, 16 октября 2009 г.

Пронумеровываем строки в запросе (часть 2)

Как я писал в прошлой статье "Пронумеровываем строки в запросе", я подумал, а что если необходимо получить результат одной строки.
- Зачем?
Ну к примеру мы хотим узнать позицию товара по рейтингу (рейтинг - например показатель популярности товара по количеству просмотров или голосов).
Как оказалось это не так уже и сложно, приведу ниже код.

SELECT `ПОЗИЦИИ`
FROM (SELECT @n := @n +1 AS `ПОЗИЦИИ` , `ПРОСМОТРЫ` , `ИД_ТОВАРА`
FROM `ТАБЛИЦА` , (SELECT @n :=0) AS z
ORDER BY `ПРОСМОТРЫ` DESC) AS x
WHERE `ИД_ТОВАРА` = '1'

(*) - SELECT @n := @n +1 AS `ПОЗИЦИИ` , `ПРОСМОТРЫ` , `ИД_ТОВАРА`
FROM `ТАБЛИЦА` , (SELECT @n :=0) AS z
ORDER BY `ПРОСМОТРЫ` DESC
// Получаем общий результат всего товара с позициями и рейтингом.

SELECT `ПОЗИЦИИ` FROM (*) AS x WHERE `ИД_ТОВАРА` = '1'
// В следущем коде мы сужаем полученый результат (*) до одной нужной позиции с помощью WHERE `ИД_ТОВАРА` = '1'.

Пронумеровываем строки в запросе

Кому-то приходилось пронумеровывать строки в запросе? А дело нужное...
Вот например необходимо вам отсортировать товар по популярности (например по просмотрам) от большего к меньшему, и поставить циферку которая будет определять какой по счету по популярности товар.
Задача не такая уж и простая для новичка, но к счастью есть лекарство.

SET @n := 0;
SELECT @n := @n + 1 AS ПОЗИЦИИ, ПРОСМОТРЫ, ИД_ТОВАРА
FROM ТАБЛИЦА ORDER by ПРОСМОТРЫ DESC;

Что нам это даст?
3 Колонки:
1 колонка позиции
2 колонка просмотры
3 ид товара
И все будет отсортировано от большего к меньшему - DESC.

Создаем функцию случайного числа для javascript

Недавно столкнулся с такой проблемой: работая с jquery мне нужно было запросом GET (JSON) получить результат на страницу. Вот тут IE6.0 начал "капризничать", по неизвестным мне причинам результат GET отображался один раз, до перезагрузки браузера. Т. е. обновлять данные, например "кнопкой" у меня не получалось, данные обновлялись только после перезагрузки IE.
Вот кусочек того кода:

function viewcomm()
{
type: "GET",
url: "/viewcomment/543/",
dataType: "json",

Вот таким был "url" передачи GET. Но все решила одна фунцкция, про которую я Вам пытаюсь расказать.
Это:
// Функция возвращает "наиболее лучшее" случайное число.

function rrand()
{
return Math.floor(arguments.length > 1 ? (999999 - 111111 + 1) * Math.random() + min : (111111 + 1) * Math.random());

};

Делаем так:

url: "/viewcomment/543/"+rrand(),

И все IE6.0 начинает работать как положено.

Ридеры