Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> zapytanie z wykluczaniem?
jot
post
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 1
Dołączył: 9.02.2006

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


Witam.

Prozaiczny problem, ktory niestety mnie przerasta. Oczywiscie zapytanie jest dluzsze ale postaralem sie skrocic go do mozliwie jak najkrotszego zeby latwiej go wytlumaczyc.

Tabela cos w tym stylu:

user_id | rodzaj_id
-----------------------------

1 | 2
1 | 3
1 | 4

Potrzebuje wyciagnac id usera odpowiadajace konretnym dwom rodzaj_id, z tym ze jesli rodzaj_id nie wystepuje powinno mi zwrocic 0.

Problem wiec jest taki:

  1. SELECT DISTINCT user_id FROM `problem` WHERE `rodzaj_id`=2 AND `rodzaj_id`=3

nie zwraca mi nic chociaz wartosci te wystepuja

  1. SELECT DISTINCT user_id FROM `problem` WHERE `rodzaj_id`=2 OR `rodzaj_id`=3

nalezycie zwraca mi id lecz wstawienie tu danej ktora nie wystepuje, czyli
  1. SELECT DISTINCT user_id FROM `problem` WHERE `rodzaj_id`=1 OR `rodzaj_id`=3

zwraca mi dalej user_id 1 choc nie powinno.

Probowalem tez testowac roznego rodzaju nawiasy, IN i na co tylko nie wpadlem ale bez rezultatow.

Podsumowujac chcialbym aby dla przykladu wskazujac 2,3,4 zeby wyrzucilo mi user_id=1
Natomiast wskazujac 1,2,3,4 zeby nie znalazlo mi nic.

Nie wiem wlasciwie czy to wogole mozliwe, no coz ale dzisiaj wigilia wiec niby kazde marzenie sie spelnia (IMG:style_emoticons/default/tongue.gif)

Go to the top of the page
+Quote Post
WiruSSS
post
Post #2





Grupa: Zarejestrowani
Postów: 83
Pomógł: 7
Dołączył: 3.02.2007

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


weźmy pod uwagę żę parametry które chcesz pobrać masz zserializowane i przypisane do jakiejś zmiennej:

  1. $params='1,2,3,4';


explodujesz je do tablicy

  1. $paramsArr=explode(',',$params);


stosujesz takie zapytanie (zakładam, że tabela posiada też kolumnę `id`):

  1. SELECT `user_id`, COUNT(`id`) AS `count_id` FROM `problem` GROUP BY `user_id` HAVING `user_id` IN ('.$params.')


wiem jaką liczbę parametrów przekazuje więc porównuje zwróconą liczbę `count_id` do ilości parametrów, jeśli jest mniejsza to sobie podstaw 0 (IMG:style_emoticons/default/smile.gif) ...nie testowałem tego więc nie wiem czy to może zadziałać.

  1. $q=mysql_query('SELECT `user_id`, COUNT(`id`) AS `count_id` FROM `problem` GROUP BY `user_id` HAVING `user_id` IN ('.$params.')');
  2. $countParams=count($paramArr);
  3. while($r=mysql_fetch_assoc($q)){
  4. if($countParams==$r['count_id']) echo 'Dopasowany id usera: '.$r['user_id'].'<br />';
  5. }
  6.  


Ten post edytował WiruSSS 24.12.2010, 13:07:21
Go to the top of the page
+Quote Post
jot
post
Post #3





Grupa: Zarejestrowani
Postów: 20
Pomógł: 1
Dołączył: 9.02.2006

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


oczywiscie nie dziala:D

  1. SELECT `user_id` , COUNT( `id` ) AS `count_id` FROM `problem` GROUP BY `user_id` HAVING `user_id` IN ('1', '3')

zwraca mi user_id=1,count_id=3

na poczatku myslalem ze moze pojdzie mi cos takiego:

  1. SELECT `user_id` , COUNT( `id` ) AS `count_id` FROM `problem` GROUP BY `rodzaj_id` HAVING `rodzaj_id` IN ('1', '3')


ale po dopisaniu drugiego usera o id 99 z rodzajami id 2,3 zaczelo mi wyswietlac jakies banialuki typu
user_id count_id
1 2
1 2

czyli wogole jakis kosmos.
tak czy inaczej wesolych swiat
gdyby ktos wpadl moze na jakis pomysl przy uszkach z barszczem to zapraszam do wypowiedzi (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
WiruSSS
post
Post #4





Grupa: Zarejestrowani
Postów: 83
Pomógł: 7
Dołączył: 3.02.2007

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


..aaa z rozpędu zrobiłem błęda

zamiast:
  1. SELECT `user_id`, COUNT(`id`) AS `count_id` FROM `problem` GROUP BY `user_id` HAVING `user_id` IN ('.$params.')


ma być:
  1. SELECT `user_id`, COUNT(`id`) AS `count_id` FROM `problem` WHERE `rodzaj_id` IN ('.$params.') GROUP BY `user_id`


Ten post edytował WiruSSS 26.12.2010, 01:21:27
Go to the top of the page
+Quote Post
jot
post
Post #5





Grupa: Zarejestrowani
Postów: 20
Pomógł: 1
Dołączył: 9.02.2006

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


Zgadza sie dziala pieknie (IMG:style_emoticons/default/guitar.gif)
i rownie pieknie dziekuje

klaniam sie w pas.
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: 15.09.2025 - 08:02