Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [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
 
Start new topic
Odpowiedzi (1 - 9)
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.
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 (IMG:http://forum.php.pl/style_emoticons/default/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?...
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 (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/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ć (IMG:http://forum.php.pl/style_emoticons/default/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ć (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

No jak? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
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.
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.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 24.08.2025 - 16:59