Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszukanie raz tekstu w tekście
Forum PHP.pl > Forum > PHP
Buffalo
Hi!
Szukam funkcji, która zamieniałaby wystąpienie danego ciągu w stringu na inny, ale tylko raz (pozostałe wystąpienia ignorowała). Str_replace niestety zamienia każde pojawienie się odpowiedniego ciągu.
Proszę o pomoc! smile.gif

PS
Robię mały sklepik internetowy (na zaliczenie:) i jest mi to usuwanie potrzebne do usuwania id produktów danego klienta przechowywanych w bazie. Tabela ma format (id_klienta, id_produktow), przy czym id_produktow są zapisywanie w formacie " id1 id2 id3 ". Jest to w ogóle sensowne? smile.gif Jak to się robi profesjonalnie? smile.gif
mike
Cytat(Buffalo @ 2006-04-30 12:09:38)
PS
Robię mały sklepik internetowy (na zaliczenie:) i jest mi to usuwanie potrzebne do usuwania id produktów danego klienta przechowywanych w bazie. Tabela ma format (id_klienta, id_produktow), przy czym id_produktow są zapisywanie w formacie " id1 id2 id3 ". Jest to w ogóle sensowne? smile.gif Jak to się robi profesjonalnie? smile.gif

Boże Ty widzisz a nie grzmisz.
Kto tak bazy projektuje :/

Poprawnie powinienes użyć tabeli łączącej:

clients
id | name | surname | ... i jakieś inne pola

products
id | ... i jakieś inne pola

clients_has_products
id_client | id_product

W tabeli clients_has_products oba pola sa kluczami obcymi z tabel clients i products odpowiednio.
LBO
Jeżeli nie potrzebujesz tej funkcji/procedury w SQL to podpowiem Tobie, jakie funkcje php potrzebujesz - bo gotowca nie dostaniesz.
strpos" title="Zobacz w manualu php" target="_manual
strlen" title="Zobacz w manualu php" target="_manual
i najważniejsza
substr_replace" title="Zobacz w manualu php" target="_manual
W substr_replace musisz pogłówkować nad wykorzystaniem strpos" title="Zobacz w manualu php" target="_manual i strlen" title="Zobacz w manualu php" target="_manual jako parametrów.

cheers
Buffalo
mike_mech : nie napisałem wszystkiego smile.gif Oczywiście mam 3 tabelki. Pytałem tylko, jak najlepiej zapisywać dane w tej trzeciej. Twoja koncepcja to osobny wiersza dla każdej pary id_klienta i id_produktu? Po co niepotrzebnie mnożyć wiersze? winksmiley.jpg

LBO : myślałem, że jest taka wbudowana funkcja. Widzę, że niestety sam będę się pobawić. Thx!
mike
Cytat(Buffalo @ 2006-04-30 13:14:42)
Twoja koncepcja to osobny wiersza dla każdej pary id_klienta i id_produktu? Po co niepotrzebnie mnożyć wiersze? winksmiley.jpg

Po to by mechanizmy wyszukiwania były dużo prostsze.
Moje zapytanie wyszukujące produkty dla klienta zajmie duuużo mniej czasu niż Twoje.

Juz nie mowiąc o tym że nie będe miał żadnych problemow z podstawymi operacjami. Ty masz problem już nawet z usuwaniem tongue.gif
Ciekaw jestem jak podasz klientowi ile ma produktów?

Wyznacznikim dobrej bazy nie jest ilość wierszy, tylko konstukcja tabel, króte ułatwiają operacje i szybkość tych operacji.
Buffalo
No niby tak, ale tabelka może rozrosnąć się do dość pokaźnych rozmiarów. Ty pewne powiesz, że po zamówieniu można je usunąć lub przenieść:) A ilość produktów? count($produkty) smile.gif
Ale ok, chyba zmienię konstrukcję tabeli smile.gif
LBO
Cytat
No niby tak, ale tabelka może rozrosnąć się do dość pokaźnych rozmiarów.
Jeżeli ma się rozrosnąć to to zrobi - właśnie wtedy najważniejsza jest konstrukcja bazy danych. By wielkośc tabel nie wpływała znacznie na wykonywanie zapytań.
Cytat
Ty pewne powiesz, że po zamówieniu można je usunąć lub przenieść
Dokładnie, po to @mike_mech podał taką konstrukcję, by ułatwić to.
Cytat
A ilość produktów? count($produkty)

Nie do końca... po to są bazy danych, żeby na nie zrzucić część zadań, a nie paprać się z tym w php.
  1. SELECT COUNT(*)
  2.  
  3. FROM clients_has_products
  4.  
  5. WHERE id_client = $id_client

P.S.
Cytat
Ale ok, chyba zmienię konstrukcję tabeli

Zmieniaj, zmieniaj - nie wyjdziesz na tym źle.
lunlog
No i w tym momencie powiem że ten temat bardzo mi się przydał biggrin.gif
Nie praktycznie ale merytorycznie.

Dzięki.
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.