Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > substring


Автор: GodEatGod 15.6.2007, 09:45
здравствуйте.

необходимо построить запрос: если 3 первые знака поля id (*) = 3 первым знакам введенного $id > замена (*) на 3 первые знака $id2

Код

$query= "UPDATE `catalogue` SET substring (`id`,1,3) = ? '$id2' WHERE substring (`id`,1,3)= ? '$id'";


2 вариант:  
Код

$query= "UPDATE `catalogue` SET `id ` = substring($id2,1,3) + substring (`id`,4,6) WHERE substring (`id`,1,3)= substring($id,1,3);
 где может быть ошибка?

Автор: sTa1kEr 15.6.2007, 12:19
1ый вариант совершенно не правильный.
2ой вариант. Во первых все строковые константы должны быть заключены в одинарные кавычки.
Во вторых строки нужно объеденять через CONCAT, т.к. через "+" они будут интерпретироватся как числа.
Код

$query= "UPDATE `catalogue` SET `id ` = CONCAT(SUBSTRING('$id2', 1, 3), SUBSTRING(`id`, 4, 6)) WHERE SUBSTRING(`id`, 1, 3) = SUBSTRING('$id', 1, 3)";

В третьих зачем нагружать MySQL, когда можно $id и $id2 обрезать в PHP?
Код

$query= "UPDATE `catalogue` SET `id ` = CONCAT('".substr($id2, 1, 3)."', SUBSTRING(`id`, 4, 6)) WHERE SUBSTRING(`id`, 1, 3) = '".substr($id, 1, 3)."'";


Автор: GodEatGod 15.6.2007, 12:34
Цитата(sTa1kEr @ 15.6.2007,  12:19)
Во вторых строки нужно объеденять через CONCAT, т.к. через "+" они будут интерпретироватся как числа.

тип поля id bigint/varchar имеет значение?

Автор: sTa1kEr 15.6.2007, 13:40
Цитата(GodEatGod @  15.6.2007,  12:34 Найти цитируемый пост)
тип поля id bigint/varchar имеет значение? 

Не имеет. Кстати, сервер MySQL? Т.к. если сервер MSSQL, то я вам наврал, в MSSQL строки можно объединять через "+".

Автор: malice_ 18.6.2007, 16:19
в php  [substring] отсчет с 0, в mysql с 1. 
вместо ($id,1,3) -> ($id,0,3).

присвойте SUBSTRING(...) переменные, а затем подставляйте их в запрос.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)