Да, {shop}.trash=0
Пишу так:
$count = DB::query_result("SELECT cat_id, COUNT(*) FROM {shop} JOIN {shop_category} ON cat_id={shop_category}.id WHERE parent_id='2' AND {shop}.trash='0' GROUP BY cat_id DESC LIMIT 3");
Ошибки:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 1' at line 1
#1 trigger_error(You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 1' at line 1, 512) called at [/home/site/public_html/includes/database.php:679]
#2 DB::query(SELECT cat_id, COUNT(*) FROM {shop} JOIN {shop_category} ON cat_id={shop_category}.id WHERE parent_id='2' AND {shop}.trash='0' GROUP BY cat_id DESC LIMIT 3 LIMIT 1) called at [/home/site/public_html/includes/database.php:319]
Видно сама цмска подставляет это значение.
Я пробовал на прямую таким способом:
$count=mysql_query("SELECT cat_id, COUNT(*) FROM `diafan_shop` JOIN `diafan_shop_category` ON cat_id=`diafan_shop_category`.id WHERE `diafan_shop_category`.parent_id='2' AND `diafan_shop`.trash='0' GROUP BY cat_id",$db);
echo$count;
Выводит надпись: Resource id #70
Что это означает?
Column 'trash' in where clause is ambiguous
#1 trigger_error(Column 'trash' in where clause is ambiguous, 512) called at [/home/site/public_html/includes/database.php:679]
#2 DB::_query(SELECT cat_id, COUNT(*) FROM `shop` JOIN `shop_category` ON cat_id=`shop_category`.id WHERE parent_id='2' AND trash='0' GROUP BY cat_id LIMIT 1) called at [/home/site/public_html/includes/database.php:141]
#3 DB::query(SELECT cat_id, COUNT(*) FROM {shop} JOIN {shop_category} ON cat_id={shop_category}.id WHERE parent_id='2' AND trash='0' GROUP BY cat_id LIMIT 1) called at [/home/site/public_html/includes/database.php:319]
Пробовал без AND trash='0' – получилось, но вывело только для первого найденного id.
$count= DB::query_result("SELECT cat_id, COUNT(*) FROM {shop} JOIN {shop_category} ON cat_id={shop_category}.id WHERE parent_id='2' AND trash='0' GROUP BY cat_id");
Так? Но оно так тоже не работает. Тоже самое bool(false). Я не силен в запросах...
$count= DB::query_result("SELECT cat_id, COUNT(*) FROM {shop} JOIN {shop_category} cat_id={shop_category}.id WHERE parent_id=2 AND trash='0' GROUP BY cat_id");
Здравствуйте.
Есть две таблицы shop и shop_category.
Мне нужно сначала выбрать все id из таблицы shop_category которые имеют parent_id = '2'.
Потом нужно выбрать общее количество всего из таблицы shop где cat_id будет равно тем id что выбрали из первого запроса.
Я делаю так:
$count= DB::query_result("SELECT COUNT(*) FROM {shop} WHERE cat_id IN ('".$row['id']."') AND trash='0'");
Но оно выводит общее количество только для одного id. Как мне во втором запросе внести все найдены id из первого запроса? (Добавление)
Или может сделать один запрос в котором будет обращение к двум таблицам и перебрать все параметры?
Здравствуйте.
Извиняюсь сразу, понимаю что это не по программированию. Но может просто подскажите как поступить.
Сmsка в фильтре по товарам делает такие ссылки:
Можете подсказать как сделать эту ссылку более человечной (ЧПУ)?
Может нужно правило по mod_rewrite?
Цифры пусть остаются цифрами а вот такие слова как module=shop&action=search и знаки & можно как-то заменить на что-то нормальное?
Дело в том что мы не знаем точное количество элементов на странице, я говорю о последней странице. Да, на всех остальных 8. А на последней может быть и не восемь.
Я вывожу количество товаров на странице и их общее количество если есть страницы пагинации. Для первой страници пагинации пишется это так: Результаты: 1-8 из 25. Для второй: Результаты: 9-16 из 25 и т.д. На каждой странице пагинации выводится восемь товаров. Все это я проверял так:
$count= DB::query_result("SELECT COUNT(id) FROM {shop} WHERE cat_id=%d",$this->diafan->_route->cat);
$pages=$this->diafan->_route->page;
// если пагинация стартовая страница и товаров не больше 8
if($pages<1 &&$count<=8)
{
$one='1';
echo'<div class="result-wrap center"><span class="result">Результаты: <b>';echo$one;echo'-'.$count;echo'</b> из <b>'.$count.'</b></span>';
}
// если пагинация стартовая страница и товаров более 8
if($pages<1 &&$count>8)
{
$one='1';
$two='8';
echo'<div class="result-wrap center"><span class="result">Результаты: <b>';echo$one;echo'-'.$two;echo'</b> из <b>'.$count.'</b></span>';
}
// если пагинация больше первой страницы и товаров больше 8 включая проверку последней страницы пагинации
if($pages>1 &&$count>=8)
{
$one='1';
$two='8';
for($i=2;$i<=$pages;$i++)
{
$one=$one+'8';
$two=$two+'8';
}
echo'<div class="result-wrap center"><span class="result">Результаты: <b>'.$one.'-'.$two.'</b> из <b>'.$count.'</b></span>';
}
Но тут нюанс в том, что на последней странице пагинации может разместится не 8 товаров а например 4. Последний if этого не предусматривает. Вот я и ломаю голову.
echo'<div class="result-wrap center"><span class="result">Результаты: <b>'.$one.'-'.$two.'</b> из <b>'.$count.'</b></span>';
}
Но мне надо сделать проверку, когда проходит последний $pages то изменить действие в цикле. Например мне нужно чтоб в цикле вместо $two = $two + '8'; срабатывало $two = $count;
Или может проще написать проверку в самом начальном if?
Я пробовал писать if (($pages>1) && ($count>8) && ($count!<8))
Но наверное нет такого !<.