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
Если бы данные лежали в нормальном формализированном виде (хотя бы один урл в ячейке) то это была задача для мускула. А найти урл в тексте, потом ещё выполнить замены - проще и быстре на пыхе или питоне


Эта страница в полной версии