Доброго времени суток. Подскажите как правильно создать запрос. Я накидал как я понял, но выдает ошибку. Код (Text): $db->Query("UPDATE db_product_time SET status = 0 WHERE id_user = '$usid' and status = 1 and name = '$citem1' and ORDER BY date_del LIMIT $limit"); То есть мне нужно обновить $limit количество строк, с сортировкой по дате
Ну, во-первых, хорошо бы показывать текст ошибки, предварительно переведя его самому и попытавшись понять смысл. А во-вторых, между последним условием и ORDER BY не нужно писать AND.
Вот ошибка Код (Text): 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 'ORDER BY date_del LIMIT 5)' at line 1
Хорошо, но я вам советовал как бы на будущее. Ответ я вам дал, т.к. в данном случае ошибка была очевидна.
@ushkom не за что. И в нагрузку, как обычно поступает коллега на форуме @denis01 , ссылочка на полезный ресурс
Подскажите пожалуйста, может можно по другому в данном случае запрос сделать Код (Text): if($qanak == 1){ $zapros = "('$usid', '$citem', '$date_add', '$date_del', '1')";} if($qanak > 1){ $zapros1 = "('$usid', '$citem', '$date_add', '$date_del', '1'),"; $zapros2 = "('$usid', '$citem', '$date_add', '$date_del', '1')"; $zapros3 = str_repeat($zapros1, $qanak - 1); $zapros = "$zapros3 $zapros2"; } $db->Query("INSERT INTO db_product_time (id_user, name, date_add, date_del, status) VALUE $zapros"); $qanak это количество одинаковых строк которые нужно создать. Возможно это все дело сократить? Спасибо
@ushkom, не рискну вас спрашивать зачем нужно N одинаковых строк, т.к. боюсь, что замучают ночные кошмары А по поводу "сократить", то можно же в цикле собрать эту часть запроса: PHP: <?php $data = []; for($i = 0; $i < $qanak; $i++) { $data[] = "('$usid', '$citem', '$date_add', '$date_del', '1')"; } $db->Query("INSERT INTO `db_product_time` (`id_user`, `name`, `date_add`, `date_del`, `status`) VALUES " . implode(',', $data));
Лишней запятой не будет. А вот проверить, перед выполнением запроса, что массив не пустой - желательно. Или же где-то выше по коду проверять, что $qanak > 0
Добрый день. Подскажите, если не сложно, где ошибка в запросе Код (Text): $now = time(); $db->Query("SELECT * FROM db_product_time WHERE status=1 and date_del<=$now"); while($row = $db->FetchArray()) $id = $row['id']; $par = $row['name']; $user = $row['id_user']; $db->Query("UPDATE db_users_b SET $par = $par - 1 WHERE id = $user"); $db->Query("UPDATE db_product_time SET status = 0, date_ob = $now WHERE id = $id"); Не видит переменные Вот ошибка 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 '= - 1 WHERE id =' at line 1
а где там запрос? http://phpfaq.ru/debug PHP: $sql = "SELECT * FROM table"; echo $sql; так ты получишь SQL запрос с подставлеными твоими переменными и мы сможем помочь и может ты сам догадаешься, потому как в переменных может быть такой текст, который ломает запрос, используй экранирование или подготовленные запросы http://phpfaq.ru/mysql/slashes
Не со не совсем понял, я пытаюсь переделать этот код Код (Text): public function CheckTime() { $db = $this->db; $now = time(); $sql = "select * from `db_product_time` where `status`=1 and `date_del`<=$now"; $db->Query($sql); $arr = array(); if ($db->NumRows()>0) { while($row = $db->FetchArray()) { $arr[] = $row; } } if (count($arr)>0) { foreach ($arr as $row) { $id = $row['id']; $par = $row['name']; $user = $row['id_user']; $sql = "update `db_users_b` set `$par`=`$par`-1 where `id`=$user"; $db->Query($sql); $sql = "update `db_product_time` set `status`=0 where `id`=$id"; $db->Query($sql); } } }
Все получилось, нужно было поставить всего навсего скобки Код (Text): $db->Query("SELECT * FROM db_product_time WHERE status = 1 and date_del <= '$radd'"); while($row = $db->FetchArray()){ $id = $row['id']; $par = $row['name']; $user = $row['id_user']; $db->Query("UPDATE db_users_b SET $par = $par - 1 WHERE id = '$user'"); $db->Query("UPDATE db_product_time SET status = 0, date_ob = $radd WHERE id = '$id'"); }
этот код PHP: $db->Query("SELECT * FROM db_product_time WHERE status = 1 and date_del <= '$radd'"); на такой PHP: echo "SELECT * FROM db_product_time WHERE status = 1 and date_del <= '$radd'"; чтобы посмотреть какой запрос получается ты по ссылки статью читал? что в ней ней понятно?
Уже все получилось, нужно было фигурные скобы поставить, я код выше показывал как я сделал. Статьи читал, к сожалению не во всем разобрался
так можно спрашивать когда встречаешь текст который тебе не понятен но ты понял как получить SQL запрос который будешь в базу отправлять? вот его и надо смотреть на наличие ошибок