Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: INSERT с MAX
 
 автор: neadekvat   (23.09.2009 в 22:44)   письмо автору
 
 

$sql = "INSERT INTO `content_right` (title, text, picture, pos)
VALUES ('$title', '$text', '$picture', (SELECT MAX(pos)+1 FROM content_right))";
$insert = mysql_query($sql);

В итоге такая ошибка:
You can't specify target table 'content_right' for update in FROM clause

Что не так?

  Ответить  
 
 автор: Trianon   (23.09.2009 в 22:46)   письмо автору
 
   для: neadekvat   (23.09.2009 в 22:44)
 

так нельзя ж писать в таблицу, из которой читаешь тем же запросом.
Обычно на автоинкрементное поле опираются в таких случаях.

  Ответить  
 
 автор: neadekvat   (23.09.2009 в 22:47)   письмо автору
 
   для: Trianon   (23.09.2009 в 22:46)
 

В интернете нарыл такой способ
Тогда как реализовать то, что мне нужно?

Автоинкримент нельзя, он использован для id, а поле pos цифры могут менятся (используется для сортировки вывода)

  Ответить  
 
 автор: Trianon   (23.09.2009 в 22:52)   письмо автору
 
   для: neadekvat   (23.09.2009 в 22:47)
 

А я не сказал - использовать в лоб.
Я сказал - опереться на.
Вторым-третьим запросом брюки превращаются... превращаются....

  Ответить  
 
 автор: neadekvat   (23.09.2009 в 23:03)   письмо автору
 
   для: Trianon   (23.09.2009 в 22:52)
 

... в жесть.

$arr = mysql_fetch_row(mysql_query("SELECT MAX(pos)+1 FROM `content_right`"));

$sql = "INSERT INTO `content_right` (title, text, picture, pos)
VALUES ('$title', '$text', '$picture', $arr[0])";
$insert = mysql_query($sql);

Ведь по-умнее можно как-то сделать?

  Ответить  
 
 автор: Visavi   (24.09.2009 в 00:16)   письмо автору
 
   для: neadekvat   (23.09.2009 в 23:03)
 

у вас записи есть в pos?

SELECT IFNULL(MAX(pos),0)+1 FROM content_right

  Ответить  
 
 автор: Trianon   (24.09.2009 в 00:38)   письмо автору
 
   для: neadekvat   (23.09.2009 в 23:03)
 

>... в жесть.
>
>$arr = mysql_fetch_row(mysql_query("SELECT MAX(pos)+1 FROM `content_right`"));
>
> $sql = "INSERT INTO `content_right` (title, text, picture, pos)
> VALUES ('$title', '$text', '$picture', $arr[0])";
> $insert = mysql_query($sql);
>
>Ведь по-умнее можно как-то сделать?

Это неустойчивый код.
Устойчивый будет INSERT , SELECT MAX(pos) ... WHERE id < SELECT_INSERT_ID() , UPDATE

А может и сложнее.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования