Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]preg_replace, str_replace i dane z tabeli
Forum PHP.pl > Forum > Przedszkole
@rtur
Mam w bazie danych 2 tabele 'zamiana' i 'teksty'

W tabeli zamiana są pola
  1. id(int)(autoincrement)
  2. txt_z(varchar):
  3. Przykładowy tekst
  4. Lorem Ipsum, dolor met
  5. txt_na(varchar):
  6. Jakiś tam tekst
  7. W Szczebrzeszynie, chrząszcz brzmi w trzcinie

Tabela teksty ma pola:
  1. id(int)(autoincrement)
  2. tekst(varchar)

jak poszukać w tabeli zamiana tekstu ze zmiennej $txt8 w kolumnie txt_z, i jak jest to zamienić go na ten z kolumny txt_na i zamieniony wrzucić do tabeli teksty?
zrobił bym to przez:
  1. $txt8 = 'Przykładowy tekst';
  2. $a = array(); // teksty z tabeli txt_z oddzielone przecinkami
  3. $b = array(); // teksty z tabeli txt_na oddzielone przecinkami
  4. $txt = str_replace($a,$b,$txt8);

albo:
  1. $txt8 = 'Przykładowy tekst';
  2. $a = array(); // teksty z tabeli txt_z oddzielone przecinkami
  3. $b = array(); // teksty z tabeli txt_na oddzielone przecinkami
  4. $txt = preg_replace($a,$b,$txt8);

Pobrać dane z tabeli umiem, tylko nie wiem jak wrzucić te dane w tablice $a i $b.
Chyba że ktoś ma inny pomysł jak to zrobić, może bardziej optymalnie to chętnie poczytam
YourFrog
Na przyszłość weź dobieraj jakoś logicznie nazwy pól/tabel bo z 10x sprawdzałem ich nazwy, a i tak nie wiem czy dobrze wykminiłem.

Wstawienie wartości do tabeli teksty
  1. INSERT INTO
  2. teksty
  3. SELECT
  4. NULL,
  5. txt_na
  6. FROM
  7. zamiana
  8. WHERE
  9. txt_z = "' . $txt8 . '";


Zaaktualizowanie starego wpisu w tabeli zmiana
  1. UPDATE
  2. zamiana
  3. SET
  4. txt_z = txt_na
  5. WHERE
  6. txt_z = "' . $txt8 . '";


Zeby nie robić niepotrzebnego update'u to mozesz sobie sprawdzać czy jakieś wartości się wstawiły przy insercie.
@rtur
Dzięki chociaż teraz widzę że napisałem nie do końca w pełni tak jak bym chciał aby to wyglądało i nie będzie chyba działać tak jak planowałem, powinienem jeszcze dopisać że w txt_z, i w txt_na, znajduje się fragment tekstu np chce zmienić określony wyraz na inny w zdaniu.
YourFrog
A to problemem nie powinno być bo MYSQL posiada różne funkcje do operacji na stringach. Chociażby http://dev.mysql.com/doc/refman/5.0/en/str...unction_replace Używasz go analogicznie do funkcji w php wink.gif
@rtur
Ups to już dla mnie wyższa szkoła jazdy....
Cytat
  1. REPLACE(str,from_str,to_str)

co powinienem podstawić za from_str i to_str żeby mi podstawiło dane z odpowiednich pól tabeli zamiana w miejsca from_str i to_str? wystarczy zwykły
  1. SELECT txt_z FROM zamiana
i
  1. SELECT txt_na FROM zamiana
YourFrog
Nie bój się kodu i popróbuj sobie bo jak ci teraz wszystko podam jak na tacy to z następnym problemem będziesz musiał znów iść na forum. Musisz próbować zrozumieć jak parser obsługuje zapytania.

Podpowiem ci tylko że można śmiało używać jako parametry nazwy pól (nawet jak baza zwraca dużą ilość wyników).

  1. SELECT REPLACE("ala ma kota", "kota", "psa");
@rtur
Poddaje się próbowałem:
  1. SELECT REPLACE('ala ma kota', 'select txt_z from zamiana', 'select txt_na from zamiana')

nie wyświetla błędu ale zwraca ala ma kota
  1. SELECT REPLACE('ala ma kota', 'zamiana.txt_z', 'zamiana.txt_na')

tak jak powyżej i kilku innych ale nic, szukałem w google jak pobrać poprzez select replace dane z innej tabeli do parametru ale nic ciekawego nie znalazłem, może po prostu nie wiem czego szukać, jakiej frazy, łatwiej byłoby mi to zrozumieć na działającym przykładzie.
YourFrog
Ehh widać że spostrzegawczość nie jest twoją mocną stroną i próbujesz jak przysłowiowa małpa bez zrozumienia tylko naparzasz w dziury klockami.

  1. UPDATE
  2. zamiana
  3. SET
  4. txt_z = REPLACE(txt_z, "Stasiek", txt_na)
  5. WHERE
  6. txt_z = "Stasiek to osioł";


Powyższe zapytanie znajdzie ci wszystkie rekordy w tabeli zmiana które w kolumnie "txt_z" posiadają tekst "Stasiek to osioł". i zamieni słowo Stasiek na zawartość kolumny txt_na.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.