Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> 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 tongue.gif

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
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 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 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 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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 19:17