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

Форум MySQL

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

 

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

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

тема: доступ к 3 первым знакам введенного значения
 
 автор: Medulla   (15.06.2007 в 09:39)   письмо автору
 
 

не могу построить запрос
mysql. id bigint

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

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

   
 
 автор: ШИМ   (15.06.2007 в 12:04)   письмо автору
 
   для: Medulla   (15.06.2007 в 09:39)
 

-

   
 
 автор: ШИМ   (15.06.2007 в 12:11)   письмо автору
 
   для: ШИМ   (15.06.2007 в 12:04)
 

Сначала лучше отреж то что нужно, а потом подставляй в запрос.
Я не немножко не понял, что куда подставлять. Но например

$first3id = substr($id,0,2);
$query=(UPDATE table SET ........  WHERE $id LIKE '$first3id%');

Идет сравнение id с переменной обрезаной до первых 3символов. Причем знак % в конце означает любое кол.символов. Т.Е

$id = $first3id и любое кол.цифр

   
 
 автор: Medulla   (15.06.2007 в 12:19)   письмо автору
 
   для: ШИМ   (15.06.2007 в 12:11)
 

$query= "UPDATE `catalogue` SET `id ` = substring($id2,1,3) + substring (`id`,4,6) WHERE substring (`id`,1,3)= substring($id2,1,3);

2 вариант. не могу найти ошибку.

   
 
 автор: ШИМ   (15.06.2007 в 12:38)   письмо автору
 
   для: Medulla   (15.06.2007 в 12:19)
 

Зачем это все в запросе делать?
Вне запроса легче ведь и понятнее, а запрос упростится.
????

   
 
 автор: Medulla   (15.06.2007 в 13:14)   письмо автору
 
   для: ШИМ   (15.06.2007 в 12:38)
 


$first = substr($id,1,3);
$second = substr($id2,1,3);
$third= substr($id,4,6);
$fourth= substr(`id`,1,3);
$query= "UPDATE `catalogue` SET `id ` = $second  + $third WHERE $fourth=$first";


PHP Warning: shell_exec() [function.shell-exec]: Unable to execute 'id' in c:\inetpub\wwwroot\объединение\update_id.php on line 25

   
 
 автор: Trianon   (15.06.2007 в 13:17)   письмо автору
 
   для: Medulla   (15.06.2007 в 13:14)
 

почему sherll_exec()?
запросы mysql_query() выполняются!

   
 
 автор: Medulla   (15.06.2007 в 13:28)   письмо автору
 
   для: Trianon   (15.06.2007 в 13:17)
 


<?php
$id
=$_POST['id'];
$id2=$_POST['id2'];
if (!
$id || !$id2)
{
echo 
'Ошибка ввода.';
exit;
}
if (!
get_magic_quotes_gpc())
{
$id addslashes($id);
$id2 addslashes($id2);
}
$connection mysql_connect('localhost','base','');
$db mysql_select_db ('tree',$connection);
$first substr($id,1,3); 
$second substr($id2,1,3); 
$thirdsubstr($id,4,6); 
$fourthsubstr(`id`,1,3); 
$query"UPDATE `catalogue` SET `id ` = $second  + $third WHERE $fourth=$first"
$result mysql_query($query);
if (
$result) echo "обновление заврешено."
mysql_close($connection);
?>

   
 
 автор: ШИМ   (15.06.2007 в 13:32)   письмо автору
 
   для: Medulla   (15.06.2007 в 13:28)
 

Блин


substr, разве не с нуля отсчет начинается, Т,Е. первый символ насколько я помню 0

   
 
 автор: Trianon   (15.06.2007 в 13:37)   письмо автору
 
   для: ШИМ   (15.06.2007 в 13:32)
 

не надо путать substr от php и substring от mysql

   
 
 автор: Medulla   (15.06.2007 в 13:37)   письмо автору
 
   для: ШИМ   (15.06.2007 в 13:32)
 

с 1

   
 
 автор: Trianon   (15.06.2007 в 13:40)   письмо автору
 
   для: Medulla   (15.06.2007 в 13:37)
 

с нуля. В php - с нуля.

   
 
 автор: ШИМ   (15.06.2007 в 13:37)   письмо автору
 
   для: Medulla   (15.06.2007 в 13:28)
 

Разберись с функцией substr


$rest = substr("abcdef", 1);    // возвращает "bcdef"
$rest = substr("abcdef", 1, 3); // возвращает "bcd"
$rest = substr("abcdef", 0, 4); // возвращает "abcd"
$rest = substr("abcdef", 0, 8); // возвращает "abcdef"

Если start отрицательный, возвращаемая 
строка начинается со start'ового символа, 
считая от конца строки string.

Пример 2. Использование отрицательного start
$rest = substr("abcdef", -1);    // возвращает "f"
$rest = substr("abcdef", -2);    // возвращает "ef"
$rest = substr("abcdef", -3, 1); // возвращает "d"

   
 
 автор: ШИМ   (15.06.2007 в 13:41)   письмо автору
 
   для: ШИМ   (15.06.2007 в 13:37)
 

$connection = mysql_connect('localhost','base','');
$db = mysql_select_db ('tree',$connection);
$first = substr($id,0,2); // первые 3 символа
$second = substr($id2,0,2);
$third= substr($id,3); // от 3 и до конца
$fourth= substr(`id`,1,3); // а здесь непонятно
$query= "UPDATE `catalogue` SET `id ` = $second + $third WHERE $fourth=$first";
$result = mysql_query($query);
if ($result) echo "обновление заврешено.";
mysql_close($connection);

   
 
 автор: Trianon   (15.06.2007 в 13:39)   письмо автору
 
   для: Medulla   (15.06.2007 в 13:28)
 

$fourth= substr(`id`,1,3);
вот здесь ошибка.
бактики стоят. А нужны апострофы.

   
 
 автор: ШИМ   (15.06.2007 в 13:43)   письмо автору
 
   для: Trianon   (15.06.2007 в 13:39)
 

а знак переменной $ перед id не нужен?

   
 
 автор: Trianon   (15.06.2007 в 13:45)   письмо автору
 
   для: ШИМ   (15.06.2007 в 13:43)
 

Нужен, конечно.
Я указал источник диагностического вывода.
В PHP бактики работают как shell_exec

   
 
 автор: ШИМ   (15.06.2007 в 13:50)   письмо автору
 
   для: Trianon   (15.06.2007 в 13:45)
 


$query= "UPDATE `catalogue` SET `id ` = '$second' + '$third' WHERE $fourth='$first' "; 


вместо $fourth нужно подставить id, наверное
Сформулируйте чотко задание, там делов то на минуту

   
 
 автор: Medulla   (15.06.2007 в 14:02)   письмо автору
 
   для: ШИМ   (15.06.2007 в 13:50)
 

может вместо + concat использовать?

id в базе 5551100000
5551200000


вводим с клавиатуры ($id) 5550000000
и новый id ($id2) 6660000000

нужно чтобы id в базе сменился на 6661100000 и 6661200000 соответственно

   
 
 автор: Trianon   (15.06.2007 в 14:20)   письмо автору
 
   для: Medulla   (15.06.2007 в 14:02)
 


$old_prefix = '555';
$new_prefix = '666';
$query = "UPDATE catalogue 
SET id = COUNCAT('$new_prefix', SUBSTRING(id, 1+LENGTH('$old_prefix')))
WHERE id like '{$old_prefix}_______'"

   
 
 автор: Medulla   (15.06.2007 в 14:45)   письмо автору
 
   для: Trianon   (15.06.2007 в 14:20)
 

$old_prefix =substr($id,0,2);
$new_prefix = substr($id2,0,2);
$query = "UPDATE catalogue SET id = COUNCAT('$new_prefix', SUBSTRING(id, 1+LENGTH('$old_prefix'))) WHERE id like '{$old_prefix}_______'";

результата нет.

   
 
 автор: Trianon   (15.06.2007 в 14:48)   письмо автору
 
   для: Medulla   (15.06.2007 в 14:45)
 

substr($id,0,3);

   
 
 автор: Trianon   (15.06.2007 в 14:48)   письмо автору
 
   для: Medulla   (15.06.2007 в 14:45)
 

substr($id2,0,3);

   
 
 автор: Medulla   (15.06.2007 в 14:59)   письмо автору
 
   для: Trianon   (15.06.2007 в 14:48)
 

спасибо большое)

   
 
 автор: Medulla   (15.06.2007 в 14:47)   письмо автору
 
   для: Trianon   (15.06.2007 в 14:20)
 

-

   
 
 автор: Trianon   (15.06.2007 в 12:50)   письмо автору
 
   для: Medulla   (15.06.2007 в 09:39)
 

id - первичный ключ?

   
 
 автор: Medulla   (15.06.2007 в 13:02)   письмо автору
 
   для: Trianon   (15.06.2007 в 12:50)
 

уже нет)

   
 
 автор: Medulla   (17.06.2007 в 20:39)   письмо автору
 
   для: Medulla   (15.06.2007 в 13:02)
 

опять вопросы)

структура таблицы id, ....., kod,kod2 (обозначают родителские id)

выполняю запрос:

$query = "UPDATE catalogue  SET id  = CONCAT('$new_prefix', SUBSTRING(id, 1+LENGTH('$old_prefix'))) WHERE id like '{$old_prefix}_______'"; 


необходимо чтобы kod/2 также получили новые префиксы, аналог. id:

$query2 = "UPDATE catalogue  SET kod  = CONCAT('$new_prefix', SUBSTRING(kod, 1+LENGTH('$old_prefix'))) WHERE kod like '{$old_prefix}_______'"; 
так не работает.
каким образом можно объединить все запросы в один? заранее спасибо

   
 
 автор: Trianon   (17.06.2007 в 20:43)   письмо автору
 
   для: Medulla   (17.06.2007 в 20:39)
 

Почему не работает?

У Вас пока нечего объединять.

   
 
 автор: Medulla   (18.06.2007 в 07:25)   письмо автору
 
   для: Trianon   (17.06.2007 в 20:43)
 

необходимо каскадно обновить/удалить только зависимые от id записи. количество уровней заранее неизвестно.

нпр, id
5550000000
5551000000
5551000001
5551000002
5551100000 5551100001

в базе:
id | kod (определяет вышестоящий уровень)
5551000000 | 5550000000
5551100001 | 5551100000

присваиваем 5551000000=666100000=> должны измениться только 6661000001
6661000002

$query = "UPDATE catalogue  SET id  = CONCAT('$new_prefix', SUBSTRING(id, 
1+LENGTH('$old_prefix'))) WHERE id like 
'{$old_prefix}_______' and kod = $id or 
kod2 = $id or (kod  =id or kod2 =id in 
(select * from catalogue where 
kod =id  or kod2 =id in (select * from 
catalogue where 
))) и.т.д.
";  



"UPDATE catalogue  SET kod  = 
CONCAT('$new_prefix', SUBSTRING(kod, 
1+LENGTH('$old_prefix'))) WHERE kod like 
'{$old_prefix}_______'and kod = $id or kod2 
= $id[-//-//query]"; 


"UPDATE catalogue  SET kod2  = 
CONCAT('$new_prefix', SUBSTRING(kod2, 
1+LENGTH('$old_prefix'))) WHERE kod2 like 
'{$old_prefix}_______'and kod = $id or kod2 
= $id[-//-//query]"; 

$query4="delete *  from catalogue 
where id=$id 
or kod= $id   or kod2 = $id  or
(kod=id or kod2=id  in (select  * from 
catalogue where 
kod=id  or kod2=id   in (select * from 
catalogue where 
kod=id   or kod2=id    (select  * from 
catalogue where 
or kod=id   or kod2=id  (select * from 
catalogue where 
)
))
))";

не знаю как исправить.

   
 
 автор: cheops   (18.06.2007 в 10:41)   письмо автору
 
   для: Medulla   (18.06.2007 в 07:25)
 

Под новые вопросы лучше заводить новые темы.

   
Rambler's Top100
вверх

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