Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php][mysql] zaawansowany WHERE
KirkoR
post
Post #1





Grupa: Zarejestrowani
Postów: 118
Pomógł: 0
Dołączył: 14.02.2004
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


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...
Go to the top of the page
+Quote Post
janek
post
Post #2





Grupa: Zarejestrowani
Postów: 51
Pomógł: 0
Dołączył: 31.01.2003
Skąd: piękne, czyste, pachnące Katowice

Ostrzeżenie: (0%)
-----


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.


--------------------
janek
Go to the top of the page
+Quote Post
skubekk
post
Post #3





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 8.08.2003
Skąd: Częstochowa

Ostrzeżenie: (0%)
-----


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]
Go to the top of the page
+Quote Post
FiDO
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


[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?...


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post
KirkoR
post
Post #5





Grupa: Zarejestrowani
Postów: 118
Pomógł: 0
Dołączył: 14.02.2004
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
FiDO
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


Cytat
Btw, właśnie wpadłem na dobry pomysł jak to usprawnić winksmiley.jpg

No jak? smile.gif


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post
KirkoR
post
Post #7





Grupa: Zarejestrowani
Postów: 118
Pomógł: 0
Dołączył: 14.02.2004
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


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.
Go to the top of the page
+Quote Post
FiDO
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


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.


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post
KirkoR
post
Post #9





Grupa: Zarejestrowani
Postów: 118
Pomógł: 0
Dołączył: 14.02.2004
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


A właściwie czym się to różni od mojego sposobu? Bo rezultat jest identyczny...
Go to the top of the page
+Quote Post
FiDO
post
Post #10





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


Wydajnoscia... i to znacznie, czym wieksza baza tym roznica bedzie wieksza.


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 00:41