Master-X
Регистрация
|
Вход
Форум
|
Новости
|
Статьи
Главная
»
Форум
»
Программинг, Скрипты, Софт, Сервисы
»
Тема:
SQL запросы кто разбиратеся нужна помощь
Новая тема
Ответить
цитата
29/09/10 в 21:11
Newestage
имеем массив ссылок в базе вида
http://sometext.com/folder/UNIQUE-ID-HERE
ссылки отличаются только уникальным ID
нужно заменить ссылки в массиве на ссылки вида
http://othertext.com/otherfolder/UNIQUE-ID-HERE?ie=someparam&tag=UNIQUE-ID-HERE
ссылки тоже отличаются только уникальным ID но тут два вхождения этого ID, в этом и заморочка. Другими словами нужно заменить часть ссылки перед ID добавить часть после ID и продублировать ID в конце ссылки
возможно ли с помощью SQL запросов решить задачу? ну или другими вариантами
цитата
29/09/10 в 21:25
Stek
Код:
CONCAT(str1,str2,...)
Returns the string that results from concatenating the arguments. Returns NULL if any argument is NULL. May have one or more arguments. If all arguments are non-binary strings, the result is a non-binary string. If the arguments include any binary strings, the result is a binary string. A numeric argument is converted to its equivalent binary string form.
mysql> SELECT CONCAT('My', 'S', 'QL');
-> 'MySQL'
mysql> SELECT CONCAT('My', NULL, 'QL');
-> NULL
mysql> SELECT CONCAT(14.3);
-> '14.3'
CONCAT_WS(separator,str1,str2,...)
CONCAT_WS() stands for CONCAT With Separator and is a special form of CONCAT(). The first argument is the separator for the rest of the arguments. The separator is added between the strings to be concatenated. The separator can be a string as can the rest of the arguments. If the separator is NULL, the result is NULL. The function skips any NULL values after the separator argument.
mysql> SELECT CONCAT_WS(',','First name','Second name','Last Name');
-> 'First name,Second name,Last Name'
mysql> SELECT CONCAT_WS(',','First name',NULL,'Last Name');
-> 'First name,Last Name'
один из двух вариантов
цитата
29/09/10 в 21:39
Newestage
а как это будет в реальном запросе выглядеть?
цитата
29/09/10 в 22:01
Еugene
если айди в поле UID1, то выглядеть будет так
Код:
select CONCAT("http://URL.COM/",UID1,"?ie=someparam&tag=",UID1) as MYLINK from TABLE1 WHERE УСЛОВИЕ;
цитата
29/09/10 в 22:05
Newestage
весь линк в одном поле в месте с айди, оно не отдельно, поэтому несовсем понял как можно сцепить то что в одном поле
раньше я делал так
UPDATE table SET field = REPLACE(field,"old","new")
но в этом случае таким образом можно заменить только то что в линке до ID
а вот как добавить параметры линка после ID и добавить в конец линка айди ведь он уникальный для каждой ссылки
Последний раз редактировалось: Newestage (
29/09/10 в 22:20
), всего редактировалось 2 раз(а)
цитата
29/09/10 в 22:12
Stek
Тогда: SUBSTRING(str FROM pos FOR len)
Код:
mysql> SELECT SUBSTRING('foobarbar' FROM 4);
-> 'barbar'
цитата
29/09/10 в 22:32
Okidoki
Код:
UPDATE table SET url2 = CONCAT("http://othertext.com/otherfolder/", SUBSTRING(url1 FROM 27),"?ie=someparam&tag=", SUBSTRING(url1 FROM 27))
WHERE условие;
27 - позиция символа с которого начинается UNIQUE-ID
цитата
29/09/10 в 23:15
Newestage
а как это будет работать для массива ссылок? ведь url1 каждая со своим уникальным ID
цитата
29/09/10 в 23:21
Еugene
ну тогда тебе в сторону регулярных выражений нужно смотреть.
и вообще, я бы эту логику вынес в скрипт, а не оставлял на уровне СУБД.
цитата
29/09/10 в 23:37
Newestage
там еще проблема в том что в поле которое содержит урл еще много всего текст html т.е. uniqueID в каждом случае на разной позиции
цитата
30/09/10 в 05:45
webboxxx
я так понимаю это разовое действие? так тогда проще будет из пхп например сделать запрос и преобразовывая урлы удобным способом в цикле апдейтить их назад, и не париться.
цитата
30/09/10 в 14:55
taj
Если бы данные лежали в нормальном формализированном виде (хотя бы один урл в ячейке) то это была задача для мускула. А найти урл в тексте, потом ещё выполнить замены - проще и быстре на пыхе или питоне
Новая тема
Ответить
Эта страница в полной версии