• 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

Object Storage Arubacloud
0 głosów
968 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 316 wizyt
pytanie zadane 8 lipca 2021 w SQL, bazy danych przez Kenzy Obywatel (1,160 p.)
0 głosów
0 odpowiedzi 279 wizyt
0 głosów
2 odpowiedzi 534 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...