Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zapytanie z wykluczaniem?
Forum PHP.pl > Forum > Bazy danych > MySQL
jot
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

WiruSSS
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.  
jot
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
WiruSSS
..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`
jot
Zgadza sie dziala pieknie guitar.gif
i rownie pieknie dziekuje

klaniam sie w pas.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.