Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyszukanie fraz z jednej kolumny
barthezpl
post
Post #1





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 2.01.2007

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


Witam.
Posiadam formularz wyszukiwania, który przeszukuje kolumnę uprawienia, i wyświetla osoby wyszukane poprzez zapytanie., które spełniają warunek np: like 'a1b'
id(pk) pesel kod_upr
1 111 a1
2 222 b1
3 333 c1
4 111 b1a
5 111 c1
6 222 a1b
  1. SELECT DISTINCT (w.pesel), w.name, w.surname, w.city, w.adddate, w.tel1, w.tel1date,
  2. w.wascalled, w.jobstart, w.jobend
  3. FROM workers w
  4. INNER JOIN workers_privilages wp USING (pesel)
  5. WHERE wp.shortname LIKE :parameter1


Teraz chciałbym rozbudować zapytanie które wyłapie mi wszystkie osoby, które posiadają kod_upr like'a1b' and like 'b%'
Niestety nie mogę poradzic sobie z tym zapytaniem
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
wiiir
post
Post #2





Grupa: Zarejestrowani
Postów: 260
Pomógł: 34
Dołączył: 22.02.2010

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


patrzac na to:
1 111 a1
2 222 b1
3 333 c1
4 111 b1a
5 111 c1
6 222 a1b

nikt nie posiada takich uprawnien, czyli kod_upr rownemu 'a1b' oraz dodatkowo kod_upr zaczynajacego sie od 'b' w tym samym rekordzie (IMG:style_emoticons/default/smile.gif) Rozumiesz?
moze chodzi i co to ze 'and' trzeba zamienic na 'or' (IMG:style_emoticons/default/smile.gif)

gdybys chcial wyszukac like 'b1a' and 'b%' to powinno znalesc:
4 111 b1a

Chodzi o to w podanym przez ciebie warunku logicznym sprawdzasz caly czas jeden rekord, jedna kolumne.
Mowiąc krótko: a1b nie zaczyna sie od b, dlatego nie znajduje danych.

Ten post edytował wiiir 21.01.2013, 22:56:36
Go to the top of the page
+Quote Post
barthezpl
post
Post #3





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 2.01.2007

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


Dzięki za odp.
Ale jak wyszukać wszystkie osoby, które mają zarówno uprawienie a1 i c1
Go to the top of the page
+Quote Post
wiiir
post
Post #4





Grupa: Zarejestrowani
Postów: 260
Pomógł: 34
Dołączył: 22.02.2010

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


SELECT id_osoby ,GROUP_CONCAT(kod_upr SEPARATOR ',') as kod_upr FROM tabelka GROUP BY id_osoby having kod_upr = 'a1,c1'

Mozna pewnie ladniej ale juz 23 i mi sie nie chce (IMG:style_emoticons/default/tongue.gif)

EDIT: Tylko nie wiem czy ten having zadziala.. jak nie to daj znac

Ten post edytował wiiir 21.01.2013, 23:12:30
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #5





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


  1. SELECT id_osoby FROM tabelka GROUP BY id_osoby HAVING Count(DISTINCT Case When kod_upr IN ('a1','c1') then kod_upr end)=2


Ten post edytował mmmmmmm 22.01.2013, 08:20:46
Go to the top of the page
+Quote Post
Firebright
post
Post #6





Grupa: Zarejestrowani
Postów: 18
Pomógł: 3
Dołączył: 19.01.2011

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


Proponuje znacznie ładniejsze (przynajmniej moim zdaniem) i znacznie szybsze (GROUP BY i HAVING są tu zupełnie zbędne) rozwiązanie:
  1. SELECT t1.id_osoby
  2. FROM tabelka t1
  3. INNER JOIN tabelka t2 ON t1.id_osoby = t2.id_osoby AND t1.kod_upr = 'a1' AND t2.kod_upr = 'c1';
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #7





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


A dla 10 uprawnień? A dla stu? (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Firebright
post
Post #8





Grupa: Zarejestrowani
Postów: 18
Pomógł: 3
Dołączył: 19.01.2011

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


Masz rację, dla większej liczby uprawnień twoje może być wydajniejsze (dla 100 moje jest niewykonalne).
Go to the top of the page
+Quote Post
wiiir
post
Post #9





Grupa: Zarejestrowani
Postów: 260
Pomógł: 34
Dołączył: 22.02.2010

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


Ten IN jest sredni w zastosowaniu, bo w moim przypadku masz jeden parametr i reszta cie gila (IMG:style_emoticons/default/wink.gif)
Chyba ze PDO i inne (albo samo mysql (IMG:style_emoticons/default/biggrin.gif) ) lapia tablice jako argumenty to zwracam honor (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #10





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


Twój kod też nie działa. (IMG:style_emoticons/default/smile.gif) Po przeróbkach pewnie by zaskoczył, ale jak na razie nie działa...
Przykład:
id_osoby, kod_upr
1, 'c1'
1, 'a1'
I nie działa... Group_CONCAT zwróci 'c1,a1'
Drugi przykład:
id_osoby, kod_upr
1, 'a1'
1, 'c1'
1, 'b1'
(IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
wiiir
post
Post #11





Grupa: Zarejestrowani
Postów: 260
Pomógł: 34
Dołączył: 22.02.2010

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


Bez przesady, wystarczy sortowanie i dziala

Ten post edytował wiiir 24.01.2013, 21:23:22
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: 22.08.2025 - 20:36