SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 10.05.2012 19:47:58

Cereus
Участник
Зарегистрирован: 10.05.2012
Сообщений: 4

Узнать порядковый номер записи запроса.

Есть такой запрос:

SELECT COUNT(p.ID) FROM cib_product as p WHERE p.ID IN (SELECT IDProduct FROM `cib_product_location` WHERE IDLocationCatalog='$IDCatalog' or (IDLocationSection='$IDCategory' and IDLocationSection!='0') or (IDLocationSection='$IDSection' and IDLocationSection!='0')) ORDER BY p.Position, p.ID

Есть некий p.ID, мне нужно знать каким по счету он идет в результате данной выборки.

Для чего:
Данным запросом я узнаю общее количество товаров, отображаемых в конкретном каталоге - разделе - секции. (постраничный вывод)
Нужно узнать номер страницы, на которой находится данный товар!

Отредактированно Cereus (10.05.2012 19:48:32)

Неактивен

 

#2 10.05.2012 20:04:15

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Узнать порядковый номер записи запроса.

Данный запрос вернет вам одно значение; p.ID он не возвращает, соответственно и вопрос о его порядковом номере в результате данной выборки не имеет смысла. Конструкция order by в данном запросе лишняя.

Приведите запрос, который возвращает p.ID, тогда можно будет сказать.
А лучше начните со статьи http://webew.ru/articles/3923.webew (там в том числе рассказывается как решить вашу проблему)

Неактивен

 

#3 10.05.2012 20:16:14

Cereus
Участник
Зарегистрирован: 10.05.2012
Сообщений: 4

Re: Узнать порядковый номер записи запроса.

Я знаю что возвращает данный запрос, весьма странное утверждение у вас smile
Дело не в том, что он возвращает, а в том какую выборку он делает.
Вопрос не может не иметь смысла, запрос не имеет смысла в заданном ключе, но он содержит нужную выборку, да я и не это спрашивал.
Скажите, пожалуйста, на какой странице "Войны и мира" есть то, что я ищу по вашей ссылке?

Может я вам покажусь нахальным типом на основе всего изложенного мною, но мне ваш ответ, что он есть, что его нет.

Неактивен

 

#4 10.05.2012 20:46:35

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Узнать порядковый номер записи запроса.

Другие способы применения. Многие реляционные СУБД позволяют в ходе выполнения запроса использовать номер текущей строки вывода.

    Oracle (переменная: rownum)
    Microsoft SQL (функция ROW_NUMBER())
    PostgreSQL (функция ROW_NUMBER())

В MySQL rownum можно корректно эмулировать только с помощью пользовательских переменных:
set @n:=0;
select @n:=@n+1 as rownum, t.* from t;

Неактивен

 

#5 10.05.2012 22:03:32

Cereus
Участник
Зарегистрирован: 10.05.2012
Сообщений: 4

Re: Узнать порядковый номер записи запроса.

SET @n :=0;
SELECT @n := @n +1 AS rownum, p.ID FROM cib_product AS p
WHERE p.ID IN
( SELECT IDProduct FROM  `cib_product_location`
WHERE IDLocationCatalog =  '$IDCatalog'
OR (IDLocationSection =  '$IDCategory' AND IDLocationSection !=  '0' ) OR (IDLocationSection =  '$IDSection' AND IDLocationSection !=  '0')
)
ORDER BY p.Position, p.ID;

Данный запрос возвращает массив пронумерованных записей, я не возьму в толк как мне вернуть не массив, а одно значение, которое будет равно номеру записи при определенном p.ID, я понимаю, что в данном запросе я нигде не указывают условие, чтобы ID равнялось чему-то, но я и не могу понять как его таким образом составить.

Неактивен

 

#6 10.05.2012 22:13:05

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Узнать порядковый номер записи запроса.

SET @n :=0;
select * from (
SELECT @n := @n +1 AS rownum, p.ID FROM cib_product AS p
WHERE p.ID IN
( SELECT IDProduct FROM  `cib_product_location`
WHERE IDLocationCatalog =  '$IDCatalog'
OR (IDLocationSection =  '$IDCategory' AND IDLocationSection !=  '0' ) OR (IDLocationSection =  '$IDSection' AND IDLocationSection !=  '0')
)
ORDER BY p.Position, p.ID) x where id=...

Неактивен

 

#7 10.05.2012 22:25:15

Cereus
Участник
Зарегистрирован: 10.05.2012
Сообщений: 4

Re: Узнать порядковый номер записи запроса.

Спасибо большое, но теперь у меня назрел другой вопрос, как выполнить эти два запроса с помощь mysql_query в PHP, ведь нельзя сделать два запроса за один вызов mysql_query

Неактивен

 

#8 10.05.2012 22:28:22

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Узнать порядковый номер записи запроса.

Использовать mysqli_query или переписать запрос через один
select * from (
SELECT @n := @n +1 AS rownum, p.ID FROM cib_product AS p
WHERE p.ID IN
( SELECT IDProduct FROM  `cib_product_location`, (select @n:=0) as xx
WHERE IDLocationCatalog =  '$IDCatalog'
OR (IDLocationSection =  '$IDCategory' AND IDLocationSection !=  '0' ) OR (IDLocationSection =  '$IDSection' AND IDLocationSection !=  '0')
)
ORDER BY p.Position, p.ID) x where id=...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson