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

Złożone zapytanie mysql

Aruba Cloud - Virtual Private Server VPS
0 głosów
420 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ź 432 wizyt
pytanie zadane 29 sierpnia 2017 w SQL, bazy danych przez MałyAleWariat Bywalec (2,830 p.)
0 głosów
1 odpowiedź 651 wizyt
pytanie zadane 24 grudnia 2019 w SQL, bazy danych przez chmieluziomal Początkujący (450 p.)
0 głosów
2 odpowiedzi 879 wizyt
pytanie zadane 24 maja 2017 w SQL, bazy danych przez Rafik Obywatel (1,870 p.)

93,329 zapytań

142,323 odpowiedzi

322,400 komentarzy

62,662 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...