Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zliczanie unikalnych wartości w wielu kolumnach
Mike0
post 11.11.2012, 23:58:32
Post #1





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 10.03.2011

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


Witam serdecznie,

Właśnie pracuję nad pewnym projektem i próbuje złożyć zapytanie MySql, które zliczy mi ilość wystąpień użytkowników w tabeli. I byłoby to banalne zagadnienie, ale...

Załóżmy, że mamy tabelę `friends`, która wygląda tak:

Kod
id | user_id | friend_id | created | accepted


a w niej:
Kod
1 | 1 | 2 | 2012-03-05 | 1
2 | 3 | 2 | 2012-03-05 | 1


I teraz chcę zliczyć ilość użytkowników (więc ważne są tu zarówno pola user_id i friend_id) którzy są zaprzyjaźnieni. Czy da się to zrealizować przez COUNT i GROUP BY? Osobiście próbowałem na wiele sposobów, ale ciągle zwracało mi niepoprawną liczbę (ważne jest, żeby każde ID użytkownika było zliczone tylko raz).

Więc dla powyższego przykładu zapytanie powinno zwrócić 3.

Czy muszę odwołać się do brzydkiej metody i zaangażować pętlę w php?

proszę o pomoc, wydaje mi się że zagadnienie jest dość ciekawe.
Go to the top of the page
+Quote Post
alegorn
post 12.11.2012, 10:17:34
Post #2





Grupa: Zarejestrowani
Postów: 341
Pomógł: 40
Dołączył: 23.06.2009

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


select (count(user_id) + count(friend_id)) as ile from ... group by user_id friend_id



powinno dzialac.

j.
Go to the top of the page
+Quote Post
Mike0
post 12.11.2012, 17:06:31
Post #3





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 10.03.2011

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


Witam, dziękuję za zainteresowanie się tematem.

Niestety to nie działa, a dokładniej nie działa tak jak bym chciał. Próbowałem z tym już wcześniej. Moim zdaniem należaloby połączyć 2 kolumny w 1 i potem zrobić count, jest coś takiego możliwe? jak?

btw. Zapytanie, które podałeś zwraca coś takiego (a ja tez oczekuje 1 liczby):
Kod
ile
2
2
Go to the top of the page
+Quote Post
d3ut3r
post 12.11.2012, 17:35:35
Post #4





Grupa: Zarejestrowani
Postów: 709
Pomógł: 176
Dołączył: 24.10.2010

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


Powinno dać dobry wynik smile.gif

  1. SELECT COUNT( `tmp` ) AS `ile`
  2. FROM (
  3.  
  4. SELECT DISTINCT `user_id` AS `tmp`
  5. FROM friends
  6. UNION
  7. SELECT DISTINCT `friend_id` AS `tmp`
  8. FROM friends
  9.  
  10. ) AS xxx


ostatnie AS xxx nie ma praktycznie znaczenia możesz za xxx wstawić cokolwiek


--------------------
http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
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 Wersja Lo-Fi Aktualny czas: 16.04.2024 - 17:24