• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[MySQL] Połączenie wyników z dwóch tabel

0 głosów
1,417 wizyt
pytanie zadane 7 marca 2019 w SQL, bazy danych przez Kuba Jakubowski Gaduła (3,550 p.)

Witam, w mojej bazie są dwie tabele: users i screenshots. W tabeli screenshots jest kolumna user_id. Chciałbym jednym zapytaniem uzyskać niektóre kolumny z tabeli users oraz liczbę screenshotów użytkownika o danym id. Dodam, że znam tylko id użytkownika którego dane chce znaleźć.

Relacje w tabeli

1 odpowiedź

0 głosów
odpowiedź 7 marca 2019 przez damian9901 Bywalec (2,140 p.)
wybrane 7 marca 2019 przez Kuba Jakubowski
 
Najlepsza
select users.*,count(ss.id) as count FROM users INNER JOIN screenshots ss on users.id=ss.user_id where users.id=$idUsera GROUP BY ss.user_id

Daj znać, czy działa, bo nie testowałem.

komentarz 7 marca 2019 przez Kuba Jakubowski Gaduła (3,550 p.)
Dzięki, działa.
komentarz 7 marca 2019 przez damian9901 Bywalec (2,140 p.)
Cieszę się, niemniej jednak proponuje trochę poczytać o dołączaniu tabel ( nie jest to jedyny sposób na wykonanie tego, ale również nie jest wydajny).
komentarz 7 marca 2019 przez Kuba Jakubowski Gaduła (3,550 p.)
Poczytałem już trochę o INNER JOIN jednak nadal nie rozumiem do czego służy GROUP BY. Może Ty mógłbyś mi to wytłumaczyć?
komentarz 8 marca 2019 przez Kuba Jakubowski Gaduła (3,550 p.)
Sory, że nie założyłem nowego tematu ale chyba nie ma potrzeby; Czy dałoby radę dodać do tego zapytania zwracanie najnowszego screenshota danego użytkownika?
komentarz 8 marca 2019 przez damian9901 Bywalec (2,140 p.)

Tak. Jest taka możliwość. Wystarczy dodać order by po grupowaniu.

1.Wyświetlanie wszystkich screenshotów danego usera - sortowanie po dacie malejąco:

select users.*,count(ss.id) as count FROM users INNER JOIN screenshots ss on users.id=ss.user_id where users.id=$idUsera GROUP BY ss.user_id ORDER BY ss.created DESC

2. Wybranie tylko jednego, ostatnio dodanego rekordu usera:

select users.*,count(ss.id) as count FROM users INNER JOIN screenshots ss on users.id=ss.user_id where users.id=$idUsera GROUP BY ss.user_id ORDER BY ss.created DESC limit 1

Odnośnie GROUP BY, to nie jestem dobry w tłumaczeniu. Po rozwiązaniu kilku przykładów związanych z tą klauzulą, zrozumiesz ją :)

komentarz 8 marca 2019 przez Kuba Jakubowski Gaduła (3,550 p.)

Przepraszam, nie wyraziłem się dość jasno, chodziło mi o zwracanie daty i czasu (wartości created) wykonania najnowszego screena. Przerabiam właśnie kurs MySQL'a ale jeszcze nie dotarłem do tego momentu.

komentarz 8 marca 2019 przez damian9901 Bywalec (2,140 p.)
Jest wiele funkcji, które umożliwiają manipulowanie datami itd. Nie chcę dawać tutaj wszystkiego na tacy, bo to nie o to chodzi. Poczytaj o funkcjach DATE() ( można je również rozdzielić na MONTH(), YEAR() itd.)  Jeśli jesteś nowy, a jesteś, to polecam stronę w3schools, tam masz wszystko, co może Ci się przydać, jako początkujący.
komentarz 8 marca 2019 przez Kuba Jakubowski Gaduła (3,550 p.)
Wiem jak wyciągnąć te dane w kilku zapytaniach, tylko nie wiem jak złączyć je w jedno. Jak pisałem wcześniej przerabiam właśnie kurs MySQL i nie doszedłem jeszcze do momentu łączenia wielu danych z wielu tablic w jednym zapytaniu.
komentarz 8 marca 2019 przez damian9901 Bywalec (2,140 p.)

Przykład:

select Year(ss.created) as year,MONTH(ss.created) as month from screenshots ss

 

komentarz 8 marca 2019 przez Kuba Jakubowski Gaduła (3,550 p.)

Pokombinowałem trochę z zapytaniami zagnieżdżonymi i wyszło mi coś takiego:

select users.name, users.alias, count(screenshots.id) as screenshots, (select url from screenshots where user_id=12 order by created desc limit 0,1) as latestSSurl, (select created from screenshots where user_id=12 order by created desc limit 0,1) as latestActivity from users, screenshots where users.id = 12 and screenshots.user_id = 12

Może nie jest to demon szybkości, ale działa. Próbowałem uniknąć redundancji usuwając drugie podzapytanie, bo różni się od pierwszego tylko tym co zwraca. Wiesz może, czy z jednego zapytania zagnieżdżonego można przypisać wartość do dwóch kolumn np:

(select url, created from screenshots where user_id=12 order by created desc limit 0,1) as latestSSurl and latestActivity

?

Podobne pytania

+1 głos
2 odpowiedzi 600 wizyt
pytanie zadane 8 lipca 2021 w SQL, bazy danych przez Kenzy Obywatel (1,160 p.)
0 głosów
0 odpowiedzi 461 wizyt
0 głosów
2 odpowiedzi 949 wizyt

93,426 zapytań

142,421 odpowiedzi

322,647 komentarzy

62,787 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...