Задавайте вопросы, мы ответим
Вы не зашли.
Есть такой запрос:
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)
Неактивен
Данный запрос вернет вам одно значение; p.ID он не возвращает, соответственно и вопрос о его порядковом номере в результате данной выборки не имеет смысла. Конструкция order by в данном запросе лишняя.
Приведите запрос, который возвращает p.ID, тогда можно будет сказать.
А лучше начните со статьи http://webew.ru/articles/3923.webew (там в том числе рассказывается как решить вашу проблему)
Неактивен
Я знаю что возвращает данный запрос, весьма странное утверждение у вас
Дело не в том, что он возвращает, а в том какую выборку он делает.
Вопрос не может не иметь смысла, запрос не имеет смысла в заданном ключе, но он содержит нужную выборку, да я и не это спрашивал.
Скажите, пожалуйста, на какой странице "Войны и мира" есть то, что я ищу по вашей ссылке?
Может я вам покажусь нахальным типом на основе всего изложенного мною, но мне ваш ответ, что он есть, что его нет.
Неактивен
Другие способы применения. Многие реляционные СУБД позволяют в ходе выполнения запроса использовать номер текущей строки вывода.
Oracle (переменная: rownum)
Microsoft SQL (функция ROW_NUMBER())
PostgreSQL (функция ROW_NUMBER())
В MySQL rownum можно корректно эмулировать только с помощью пользовательских переменных:
set @n:=0;
select @n:=@n+1 as rownum, t.* from t;
Неактивен
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 равнялось чему-то, но я и не могу понять как его таким образом составить.
Неактивен
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=...
Неактивен
Спасибо большое, но теперь у меня назрел другой вопрос, как выполнить эти два запроса с помощь mysql_query в PHP, ведь нельзя сделать два запроса за один вызов mysql_query
Неактивен
Использовать 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=...
Неактивен