Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] zaawansowany WHERE
Forum PHP.pl > Forum > PHP
KirkoR
Mam komórki w których umieszczam n liczb poprzedzielanych ":" np.:
Kod
1:5:9:

Jak zrobić aby na poziomie slectowania z bazy pobrać tylko te które zawierają np. 5
Nie chcę pobierać wszystkich rekordów, nastepnie ciąć string i w zależności czy się zgadza czy nie wyświetlać dane - przy rekordach liczonych w tysiacach to będzie długo trwało...
janek
Możesz zastosować:
[sql:1:889c55cf01]select kolumny from tabela where kolumna_z_liczbami like '%5%'[/sql:1:889c55cf01]
ale klauzula LIKE działa dosyć wolno i musisz liczyć się z utratą wydajności.
skubekk
Chyba nietakie zaawansowane to zapytanie, bo ucze sie mysql od niecałych 2 tygodni biggrin.gif
[sql:1:8f0b4affe8]SELECT pole FROM tabela WHERE liczby LIKE '%5%' ;[/sql:1:8f0b4affe8]
FiDO
[sql:1:e5c2620f8d]
SELECT *
FROM tabela
WHERE pole RLIKE '(^|:)XX(:|$)';
[/sql:1:e5c2620f8d]
Za XX podstawiasz liczbe, ktorej szukasz.
Bedzie to wydajniejsze niz robienie tego z php, ale wiecej bys zyskal jakbys przeprojektowal baze, bo widze tu probe zastosowania relacji 1-n w dosc niefortunny sposob.
Jak chcesz to napisz jakie masz teraz tabele (i pola w nich), a podpowiem Ci (albo ktos inny jak zdazy :)) jak to powinno wygladac.


---edit:
Panowie.. Wasze rozwiazanie jest slabe.. mowa jest o liczbach, a nie o cyfrach, czyli moze byc cos wiecej niz 10, a jak zadziala Wasze rozwiazania jak w tym polu bedzie liczba 15?...
KirkoR
skubekk --> Twój sposób jest zły tongue.gif Bo wtedy wyświetli wszystkie liczby w których jest cyfra 5, czyli np. 99835 itd...

P.S
teraz zauważyłem, że mój poprzednik napisał to samo winksmiley.jpg

Aktualnie jeszcze nie mam tabeli. Na razie myślę nad tym teoretycznie. Btw, właśnie wpadłem na dobry pomysł jak to usprawnić winksmiley.jpg
FiDO
Cytat
Btw, właśnie wpadłem na dobry pomysł jak to usprawnić winksmiley.jpg

No jak? smile.gif
KirkoR
Dwie tabele: Jedna to userzy a druga to lista imprez. W liscie imprez będą zapisani userzy biorący w niej udział. Pobiera mi z bazy jedną imprezkę, nastpnie dzielę string 1:6:9:3:234:43:76 ... wstawiam do tabeli, robię for(...) selec z where='id_usera' dzięki czemy pobiera mi tylko userów z danej imprezy.
FiDO
Mozna to zrobic o wiele lepiej. To jest widze jednak relacja wiele do wielu, wiec trzebaby dodac jedna tabele pomocnicza.

Podam Ci uproszczona wersje.

Tabele:

users: id | imie | nazwisko | inne_dane...
imprezy: id | data| inne_dane...
users_imprezy: user_id | impreza_id

Teraz dodawanie userow do danej imprezy wyglada tak, ze dodajesz wpisy do tabeli łączącej (users_imprezy), np dla imprezy o ID 2:
Kod
user_id | impreza_id

1         2

4         2

14        2

24        2

8         2

9         2

Oznacza to tyle, ze userzy o ID 1,4,14,24,8 i 9 sa przypisani do imprezy o ID=2.

Teraz jak chcesz wybrac userow z danej imprezy (zakladam, ze znasz jej ID) robisz cos takiego:
[sql:1:7c89827999]SELECT u.*
FROM users u, users_imprezy ui
WHERE u.id = ui.user_id
AND ui.impreza_id = 2[/sql:1:7c89827999]
Za 2 podstawiasz numer imprezy, z ktorej chcesz wybrac userow.
KirkoR
A właściwie czym się to różni od mojego sposobu? Bo rezultat jest identyczny...
FiDO
Wydajnoscia... i to znacznie, czym wieksza baza tym roznica bedzie wieksza.
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.