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

Złożone zapytanie mysql

Object Storage Arubacloud
0 głosów
296 wizyt
pytanie zadane 21 października 2017 w SQL, bazy danych przez Krzysztofson Użytkownik (620 p.)
Witam,

Piszę spory projekt i mam problem z poprawnym pobraniem danych z bazy.

Mam dwie tabele 'posty' i 'lajki' i gdy ktos doda post zapisuje sie on w tabeli posty, a gdy ktos ten post polubi zapisuje sie to jako osobny rekord w tabeli 'lajki' (do tabeli lajki dodany zostaje rekord: kto_polubil, id_polubionego_postu),

moj problem polega na tym ze chce wybierac posty pod wzgledem ich popularnosci (posty majace najwiecej polubien na poczatku ). Napisalem do tego skrypt PHP ktory najpierw wyciaga id_postu z tabeli posty a potem sumuje liczbe rekordow z tabeli 'lajki' ktore posiadaja id_postu = ten wlasnie post, jednak nie dziala on do konca tak jakbym chcial i stad moje pytanie : Moze mozna to zrobic w samym mysql? moze jakies zagniezdzone zapytanie ?

Pozdrawiam

2 odpowiedzi

+1 głos
odpowiedź 21 października 2017 przez Boshi VIP (100,240 p.)
wybrane 23 października 2017 przez Krzysztofson
 
Najlepsza
Count + Group by z joinem + opcjonalnie having
komentarz 22 października 2017 przez Krzysztofson Użytkownik (620 p.)
Tylko wlasnie nie wiem w jaki sposob moge tego count sensownie uzyc. Ponizej napisalem jak wyglada moja tabela w bazie. Nie wiem jak jednym zapytaniem zliczyc ile kazde id_postu ma rekordow z lajkiem w tabeli, a pozniej w zaleznosci od tej liczby wyswietlac te rekordy w kolejnosci od najwiekszej
0 głosów
odpowiedź 21 października 2017 przez jeremus Maniak (59,720 p.)
-- W MSSQL lub Oracle pomocna jest instrukcja WITH
with C_lajk(id_post,ile_lajk)
as
( select id_post,count(*) as ile_lajk from lajki group by id_post )
select posty.* from posty,c_lajk where posty.id_post=c_lajk.id_post order by c_lajk.ile_lajk desc

-- w mssql zdaje sie nie ma instrukcji WITH, więc najprościej skorzystać z tabeli tymczasowej
 select id_post,count(*) as ile_lajk from lajki group by id_post into table c_lajk

-- a potem tak samo
select posty.* from posty,c_lajk where posty.id_post=c_lajk.id_post order by c_lajk.ile_lajk desc

 

komentarz 21 października 2017 przez Boshi VIP (100,240 p.)
Po co takie kombinacje ? przecież korzystając z count i group by ma od razu wyniki..
komentarz 21 października 2017 przez jeremus Maniak (59,720 p.)
nie od razu -  bo on chce wyświetlić posty w kolejności ilości lajków - trzeba złączyć tabelę posty z tabela laki pogrupowana po id-post i dopiero wtedy posortować wg ilości lajków
komentarz 21 października 2017 przez Boshi VIP (100,240 p.)
I mówisz, że jednym zapytaniem tego się nie da zrobić, do tego bez tabeli tymczasowej ? heh
komentarz 22 października 2017 przez Krzysztofson Użytkownik (620 p.)
tylko najwiekszym problemem jest to, ze nie mam w zadnej kolumnie podliczonych lajkow jaka dany post posiada tylko kazdy lajk jest osobnym rekordem w tabeli:

tabela 'lajki'

post;              kto;                   lajk;

(nr postu)     (autor lajka)      (0 lub 1) 1 oznacza lajka, a zero dislajka

i teraz chce zliczyc ile razy wystepuje rekord z wartoscia w kolumnie 'post' o danym id_postu, i pod wzgledem ktore id jest najwiecej razy w tabeli wyswietlic go jako pierwszy
komentarz 23 października 2017 przez Krzysztofson Użytkownik (620 p.)
dokladnie!

wielkie dzieki :D

Podobne pytania

0 głosów
1 odpowiedź 360 wizyt
pytanie zadane 29 sierpnia 2017 w SQL, bazy danych przez MałyAleWariat Bywalec (2,830 p.)
0 głosów
1 odpowiedź 452 wizyt
pytanie zadane 24 grudnia 2019 w SQL, bazy danych przez chmieluziomal Początkujący (450 p.)
0 głosów
2 odpowiedzi 716 wizyt
pytanie zadane 24 maja 2017 w SQL, bazy danych przez Rafik Obywatel (1,870 p.)

92,579 zapytań

141,432 odpowiedzi

319,657 komentarzy

61,963 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!

...