[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Удаление строк в таблице
Владимир55
Требуется удалить из таблицы последние записи, количество которых находится в переменной $n_del:

mysql_query("DELETE FROM log_commerce_ml ORDER BY id LIMIT '$n_del'");
echo mysql_errno()." 539 : ".mysql_error()."<BR>";


Получаем сообщение:
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 ''2'' at line 1


Что здесь неверно?
Игорь_Vasinsky
mysql_query("DELETE FROM `log_commerce_ml` ORDER BY `id` DESC LIMIT ".(int)$n_del);
echo mysql_errno()." 539 : ".mysql_error()."<BR>";


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
inpost
а зчем ORDER BY ?

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Владимир55
Цитата (inpost @ 12.01.2013 - 17:21)
а зчем ORDER BY ?

Что бы удалялись самые ранние записи.
Владимир55
Работает превосходно, только не могу понять, почему закрывающиеся кавычки стоят не в конце запроса, а здесь:
DESC LIMIT "


И еще.
Смотрю в сети множество примеров. Поля в кавычки не включаются, тем более в обратные. А это надо делать? Обязательно?
inpost
Владимир55
Кавычки нужны. Запрос не закрылся, запрос закрывается по закрытию скобки. А то, что ты видишь выше - конкатенация, то есть СКЛЕИВАНИЕ строк+переменных в одну строку:
$x = 'Hello';
$y = 'world';
$z = '!';
echo $x.' '.$y.$z;

Через конкатенацию строк я поместил пробел между Hello и World. У тебя тоже самое.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Владимир55
Цитата (inpost @ 12.01.2013 - 17:44)
Владимир55 Через конкатенацию строк я поместил пробел между Hello и World. У тебя тоже самое.

А зачем это? Зачем сам пробел?

Почему нужно склеивать, когда можно написать в одну строку сразу?

В чем тут смысл?
Игорь_Vasinsky
Цитата
Работает превосходно, только не могу понять, почему закрывающиеся кавычки стоят не в конце запроса, а здесь:
DESC LIMIT "


это конкатенация (склейка текста и переменных php), можешь так

mysql_query("DELETE FROM `log_commerce_ml` ORDER BY `id` DESC LIMIT ".(int)$n_del." ");



_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
inpost
Владимир55
Смысл в восприятии.
Представь ситуацию, что тебе надо написать слово game и окончание s,
$x = 'game';
echo "$xs"; // будет пытаться загрузить переменную xs, которой нет!
echo $x.'s'; // отобразит правильно!


_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Владимир55
1. То есть, при использовании экзотических названий таблиц и полей об их закавычивании можно не беспокоиться?

2. Или такой критерий: если запрос исполняется, то о нем можно не беспокоиться - следовательно, парсер MySQL в нем разобрался и в дальнейшем все будет нормально.
Это справедливо?

3. А если имена полей и таблиц заданы в переменных, то можно писать так:
<?php  
mysql_query("DELETE FROM $log_commerce_ml ORDER BY $id DESC LIMIT $n_del");


Или нужно так:
<?php  
mysql_query("DELETE FROM `" . $log_commerce_ml . "` ORDER BY `" . $id . "` DESC LIMIT $n_del");

inpost
Владимир55
Второй вариант предпочтителен. К тому же ты не до конца выделил, там лимит тоже надо.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.