konto usunięte

Temat: pytanie o query

Witam,


Mam szybkie pytanie do osob obytych w temacie pisania zapytan sql.

Otoz chce zaupdateowac kolumne, w ktorej sa aliasy do stron. Chcialbym zasilic ją w nastepujacy sposob: Nazwa_id.

http://dl.dropbox.com/u/300449/sql.jpg


cos w tym stylu:


START TRANSACTION;
SELECT @A:=Nazwa(Nazwa),@B:=id(id) FROM cat_produkty WHERE `cat_prd_alias`='';
UPDATE cat_produkty SET cat_prd_alias=@A+"_"@B WHERE `cat_prd_alias`='';
rollback;


ale to cos nie dziala. Poza tym, rollback nie hula, cos zle napisalem?

z gory dzieki za wsparcie
Michał Jarosz

Michał Jarosz Frontend Developer &
Team Leader

Temat: pytanie o query

To jakoś tak będzie.

UPDATE 
cat_produkty
SET
cat_prd_alias = CONCAT(Nazwa,'_',id)
WHERE
cat_prd_alias='' OR cat_prd_alias IS NULL


Jaki jest silnik tabeli? Transakcje są tylko dla InnoDB.

konto usunięte

Temat: pytanie o query

Michał Jarosz:
To jakoś tak będzie.

UPDATE 
cat_produkty
SET
cat_prd_alias = CONCAT(Nazwa,'_',id)
WHERE
cat_prd_alias='' OR cat_prd_alias IS NULL


Jaki jest silnik tabeli? Transakcje są tylko dla InnoDB.

dzieki.

a w jaki sposob sprawdzic 'silnik tabeli'?
Kiedys pracowalem w ms sql, stad mi ten transaction i rollback zostal... myslalem ze to jest zawsze...

okay, poniewaz nie do konca to zapspokoilo moje potrzeby, lekko zmodyfikowalem to query dodajac funkcje substring, na kolumnie Nazwa:

UPDATE cat_produkty SET cat_prd_alias = CONCAT(SUBSTR(Nazwa,1,60),'_',id) where id = '1183' 


Ale w nazwie wystepuja czasem kropki, spacje, PL znaki :( W jaki sprytny sposob to wymienic na podloge?

- okay, sluzy temu funkcja replace, ale w jaki sposob wpisac wiecej znakow do wymiany. Podstawowe query wyglada nastepujaco:


SELECT REPLACE(`cat_prd_alias`, '.', '_') FROM cat_produkty
Jan Truskawa edytował(a) ten post dnia 26.09.10 o godzinie 19:56
Michał Jarosz

Michał Jarosz Frontend Developer &
Team Leader

Temat: pytanie o query

SHOW CREATE TABLE cat_prd_alias;
pokaże Ci strukturę tabeli, w tym przy samym końcu ENGINE =

Niestety takiego REPLACE'a jakiego szukasz w MySQL nie ma. Pozostaje Ci napisanie własnej funkcji w której będzie seria REPLACEów), albo wyciągnięcie tego zadania do aplikacji, gdzie załatwisz to jakimś regexem.

konto usunięte

Temat: pytanie o query

okay, dzieki za pomoc.

mam jeszcze 2 pytania, na ktore nie moglem znalezc odpowiedzi.

chcialbym zrobic replace'a tu: _'Phyllitis'_4801 usunac te podloge z przodu i zamienic ciapki na podloge.

zapytanie like '_%' nie zwraca mi oczekiwanego wyniku, a:
REPLACE(`cat_prd_alias`, ''', '_'); zwraca blad skladni
Krzysztof Białkowski

Krzysztof Białkowski Software Developer
(C# .NET)

Temat: pytanie o query

Jan Truskawa:
okay, dzieki za pomoc.

mam jeszcze 2 pytania, na ktore nie moglem znalezc odpowiedzi.

chcialbym zrobic replace'a tu: _'Phyllitis'_4801 usunac te podloge z przodu i zamienic ciapki na podloge.

zapytanie like '_%' nie zwraca mi oczekiwanego wyniku, a:
REPLACE(`cat_prd_alias`, ''', '_'); zwraca blad skladni

Podłogę z przodu możesz usunać czymś takim :

mysql> select * from t where cos like '_%';
+-------------------+
| cos |
+-------------------+
| _'Phyllitis'_4801 |
+-------------------+



select TRIM(LEADING '_' from cos) from t where cos like '_%';
+----------------------------+
| TRIM(LEADING '_' from cos) |
+----------------------------+
| 'Phyllitis'_4801 |
+----------------------------+


Natomiast aby zamienić ciapki musisz w replace dać \ przed ciapką.

mysql> select REPLACE(cos,'\'','_') from t;
+-----------------------+
| REPLACE(cos,'\'','_') |
+-----------------------+
| __Phyllitis__4801 |
+-----------------------+
Krzysztof Białkowski edytował(a) ten post dnia 03.10.10 o godzinie 19:05

konto usunięte

Temat: pytanie o query

dzieki. to bylo to!

Następna dyskusja:

lamerskie pytanie - "table ...




Wyślij zaproszenie do