[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: как записать одной строкой SELECT и UPDATE
skolozhabskiy
добрый вечер!

как можно записать одной строкой два выражения:


$table = 'test';
$query = "UPDATE $table SET `status` = CASE WHEN CURDATE()<DATE(`timeLeft`) THEN 1 ELSE 0 END"; // поле `timeLeft` типа timestamp


и


$table = 'test';
$query = "SELECT * FROM $table";


чтобы потом применить один раз:

$results = mysql_query($query);


спасибо



Спустя 6 минут, 1 секунда (5.09.2011 - 21:33) Игорь_Vasinsky написал(а):
Да вроде нельзя.

Спустя 16 минут, 28 секунд (5.09.2011 - 21:50) skolozhabskiy написал(а):
а все же как можно все это записать лаконичнее?

сейчас так:

$table = 'test';
$query = "UPDATE $table SET `status` = CASE WHEN CURDATE()<DATE(`timeLeft`) THEN 1 ELSE 0 END"; // поле `timeLeft` типа timestamp
$results = mysql_query($query);
$query = "SELECT * FROM $table";
$results = mysql_query($query);

Спустя 5 минут, 25 секунд (5.09.2011 - 21:55) Игорь_Vasinsky написал(а):
Я и забыл про условия в SQL :(

помоему - оптимально, только конкатенации нету.

'" . $variable. "'

Спустя 5 минут, 40 секунд (5.09.2011 - 22:01) skolozhabskiy написал(а):
не совсем понял где именно "конкатенации нету"?

обе записи работают без ошибок!

Спустя 10 минут, 36 секунд (5.09.2011 - 22:11) sergeiss написал(а):
Цитата (skolozhabskiy @ 5.09.2011 - 22:27)
как можно записать одной строкой два выражения:...

Чтобы это сделать, надо использовать PostgreSQL smile.gif Там это делается легко и просто. Точнее, там можно вывести то, что было "проапдейчено", т.е. изменено. Достаточно только в конце запроса с UPDATE написать "RETURNING *", как можно будет получить список все измененный строк со всем столбцами. Можно вместо звёздочки написать список полей, которые интересуют.

Спустя 6 минут, 11 секунд (5.09.2011 - 22:17) skolozhabskiy написал(а):
я поясню задачу: необходимо всеже используя mysql перед считыванием всех полей SELECT от таблицы проверить совпадение текущей даты с датой введенной в поле timestamp? если поле с timestamp больше по дате текущей, то в поле status записть 1 если равно или меньше то 0. далее обычным способом while ($row = mysql_fetch_assoc($results)) {} считываются любые (и неапрейченные и апгрейченные поля) значения полей таблицы. может все это можно записать одной трокой иначе?

спасибо за ответ.

Спустя 1 минута, 46 секунд (5.09.2011 - 22:19) Игорь_Vasinsky написал(а):
Цитата
не совсем понял где именно "конкатенации нету"?

я про оформление SQL запроса. в подписи несть ссылка.


Спустя 59 минут, 7 секунд (5.09.2011 - 23:18) skolozhabskiy написал(а):
спасибо но я ничго кроме рекламы на сайте в подписи не нашел.

может профессионалы все же подскажут как решить данную проблему более лаконично: необходимо, используя mysql, перед считыванием всех полей SELECT от таблицы проверить совпадение текущей даты с датой введенной в поле timestamp? если поле с timestamp больше по дате текущей, то в поле status записать 1, если равно или меньше то 0. далее обычным способом while ($row = mysql_fetch_assoc($results)) {} считываются любые поля (значения полей) таблицы.

спасибо за ответ

Спустя 56 минут, 52 секунды (6.09.2011 - 00:15) Игорь_Vasinsky написал(а):
Цитата
спасибо но я ничго кроме рекламы на сайте в подписи не нашел.

biggrin.gif biggrin.gif biggrin.gif biggrin.gif biggrin.gif biggrin.gif

ну не нашёл, значит не искал. (в моей подписи - про оформление SQL запрсов) удач. не профи тады не лезут wink.gif

Спустя 1 час, 5 минут (6.09.2011 - 01:20) Guest написал(а):
спасибо, я не на ту ссылку обратил внимание, но у меня все правильно прописано. вопрос остается прежним. спасибо за любую идею.

Спустя 7 часов, 34 минуты, 1 секунда (6.09.2011 - 08:54) Evilsoul написал(а):
да нет такого в mysql! и вообще для каких это целей "одной строкой"?

Спустя 19 минут, 48 секунд (6.09.2011 - 09:14) Игорь_Vasinsky написал(а):
чтобы сократить кол-во запросов (в 2 раза видимо).

Спустя 1 час, 9 минут, 27 секунд (6.09.2011 - 10:23) Evilsoul написал(а):
blink.gif бред, тем более с такими запросами...

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

Спустя 22 минуты, 40 секунд (6.09.2011 - 10:46) sergeiss написал(а):
Цитата (Evilsoul @ 6.09.2011 - 09:54)
и вообще для каких это целей "одной строкой"?

Зачем это нужно ТС - не знаю.

Но если делать так, как я написал (в PostgreSQL), то смысл есть. Я могу получить четкий список строк таблицы, которых коснулись изменения, плюс увидеть всё в новом виде. В ряде случаев это может быть очень полезно. Да и количество измененных строк сразу же видно. Не нужно, в отличие от MYSQL, делать дополнительные запросы о количестве.

Спустя 10 часов, 13 минут, 41 секунда (6.09.2011 - 21:00) Evilsoul написал(а):
sergeiss
Да, но как ты подчеркнул и говорил выше, это возможно, но в PostgreSQL.
Да это удобнее, никто не спорит, но не в данном случаи smile.gif
Быстрый ответ:

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