Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyświetlenie wyników, które się powtarzają
Forum PHP.pl > Forum > Bazy danych > MySQL
switch
Proszę o pomoc, bo mam z tym kłopot. Potrzebuję wyświetlić lata, ale wyłącznie kiedy powtarzają się jednocześnie. Np mam rok 2012 i 2011. Mam wyświetlić wyniki tylko tam, gdzie będzie występować zarówno rok 2012 jaki 2011.

Jeżeli dam:
  1. SELECT * FROM nazwa WHERE rok = 2012 OR rok = 2011 GROUP BY nazwa

wyświetlą się nazwy, gdzie występuje 2012 lub 2011 rok

To samo jak dam:
  1. SELECT * FROM nazwa WHERE rok IN (2012, 2011) GROUP BY nazwa

Tu też wyświetlą się nazwy, gdzie umieszczono 2012 lub 2011

A ja potrzebuję wyświetlić nazwy, gdzie umieszczono dla nazwy zarówno rok 2012 i 2011 i wyeliminować te nazwy, gdzie są tylko pojedyńcze lata.

To nie działa:
  1. SELECT * FROM nazwa WHERE rok = 2012 AND rok = 2011 GROUP BY nazwa


Dzięki za pomoc.

Chyba już znalazłem rozwiązanie. Trzeba sprawdzić ile razy występuje rok:
  1. SELECT * FROM nazwa WHERE rok IN (2012, 2011) GROUP BY nazwa HAVING COUNT( rok ) > 1
mortus
Cytat(switch @ 15.02.2012, 19:42:25 ) *
Chyba już znalazłem rozwiązanie. Trzeba sprawdzić ile razy występuje rok:
  1. SELECT * FROM nazwa WHERE rok IN (2012, 2011) GROUP BY nazwa HAVING COUNT( rok ) > 1

Oczywiście rozwiązanie jest jak najbardziej prawidłowe. Warto jednak abyś wiedział, że COUNT(rok) nie zlicza ilości występowania lat 2011 i 2012, ale liczbę rekordów w danej grupie nazw (klauzula GROUP BY nazwa). Równie dobrze możesz napisać COUNT(*) > 1.
switch
A jak zrobić, aby pokazwane były wyłącznie nazwy, które występują wyłącznie w wybranym roku a w innych nie. Chodzi o to, aby wyeliminować nazwy, które występują w kilku latach. Przykładowo chcę mieć tylko nazwy, które wystąpiły w roku 2010 i nigdzie indziej.

Jak dam:
  1. SELECT * FROM nazwa WHERE rok = 2010 GROUP BY nazwa

Otrzymam nazwy z roku 2010, ale wystąpienia moga dotyczyć również innych lat, bo nazwa może wystapić w roku 2011, 2012, 2009 itp

Jak dam:
  1. SELECT * FROM nazwa WHERE rok IN (2010, 2011,2012) GROUP BY nazwa HAVING COUNT(*) = 1

Otrzymam wszystkie nazwy ,które w tych latach wystąpiły raz a w innych ich nie było. Ale wtedy mogą być to nazwy również w latach 2011, 2012.

A ja chcę wyciągnąć tylko np z roku 2010. Czyli wystapił w roku 2010 a w innych nie. Pewno jest to proste jak budowa cepa...
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.