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

sql - wyniki

Hosting forpsi easy 1 pln
0 głosów
244 wizyt
pytanie zadane 22 sierpnia 2016 w SQL, bazy danych przez Alterwar Dyskutant (7,650 p.)

Witam

Posiadam tabele: Nazwa Tab

id      id_foreign      date
1            1                      
2            1
3            1
4            1
5            1
6            2
7            2
8            2
9            2
10          3
11          3
12          3
13          3

Czy jest możliwość wyciągnięcia ostatnich 5 rekordów każdego id_foreign?

Czyli: ostatnie 5 rekordów z kolumny foreign =3, =2, itd

Próbuję już z dobre 3h i jedyne co to wyciągam ostatnie 5 rekordów z bazy..

1 odpowiedź

0 głosów
odpowiedź 22 sierpnia 2016 przez Surykat Stary wyjadacz (14,760 p.)

Nie rozumiem. Chcesz z tej tabeli wyciągnąć ostatnie pięć id_foreign?

Użyj: 

SELECT TOP 5 id_foreign FROM Nazwa Tab Order by id desc

W przypadku gdy id nie definiuje kolejności rekordów, możesz posortować po dacie dodania do bazy.

Nie wiem, czy dobrze Cię rozumiem.

komentarz 26 sierpnia 2016 przez Surykat Stary wyjadacz (14,760 p.)
To nic trudnego, spokojnie. Powodzenia!
komentarz 26 sierpnia 2016 przez ghi Nowicjusz (100 p.)

czyli mam np tabelę newsy z polami 

time|news_id|cat_id

zależy mi na 5 newsach z każdej cat_id

robię identyczną tabelę pomocniczą nazywam ją last_5_news_by_cat_id z polami

time|news_id|cat_id

tworze trigger dla tabeli newsy

create trigger "news_after_insert" AFTER INSERT ON `newsy`
// co tu dalej powinno być żeby sprawdzało czy w tabeli 
// "last_5_news_by_cat_id"

// jest 5 rekordów z tym cat_id, jeśli nie doda go do tabeli 
// "last_5_news_by_cat_id" a jeśli jest 5 to doda nowy rekord
// taki jak ten dodany do tabeli newsy i usunie ten najstarszy z niej

jak mam to wszystko zapisać?

komentarz 27 sierpnia 2016 przez Surykat Stary wyjadacz (14,760 p.)
No masz if'y, pętle, można programować normalnie. ;)

Najpierw robisz selecta po ID, które właśnie dodałeś i zapisujesz COUNT() klucza głównego tabeli pomocniczej (ograniczonej tym ID które właśnie dodajesz) do zmiennej. Sprawdzasz czy ta zmienna jest większa lub równa 5- jeśli tak, bierzesz ID ostatniego rekordu z zapytania, które wykonałeś na początku i robisz odpowiedniego deleta na tabeli pomocniczej, oraz dodajesz nową wartość, w przeciwnym razie po prostu dodajesz wartość.

W jakim systemie sql to piszesz? Nie chcę podawać gotowego kodu, bo z triggerami miałem niewiele do czynienia, a chwilowo nie mam czasu. Może popołudniu skrobnę jakiś szkielet.

Jak nie chcesz używać triggera, możesz zrobić procedurę składowaną, która zrobi to samo co trigger, ale w przyszłości musisz pamiętać, żeby inserty robić zawsze przez nią, aby zachować spójność danych- trigger uruchomi się przy każdym insercie, co jest trochę bezpieczniejsze (co jednak czasem może być problematyczne :P ).
komentarz 27 sierpnia 2016 przez ghi Nowicjusz (100 p.)
Chyba to usuwanie nadmiarowych ogarnę szybciej w php tylko nie Wiem jak jeśli znajdzie np 7 rekordów z cat_id = 5 powiedzmy znaleźć te starsze 2 jak ustaic które 2 są do usunięcia?
komentarz 27 sierpnia 2016 przez Surykat Stary wyjadacz (14,760 p.)
Jeśli wprowadzisz tą tabelę na samym początku rozwoju bazy danych, to nie musisz się tym martwić. Jeśli natomiast masz jakieś rekordy tego typu, to bym sobie napisał skrypt w sql, który wyczyści mi wszystkie najstarsze rekordy, zostawiając 5 najnowszych. A jak to zrobić?

Jeśli ID u ciebie jest rosnące z każdym kolejnym rekordem (są różne klucze, nie zawsze tak musi być), to możesz pogrupować po głównym ID i grupy przefiltrować, zostawiając 5 największych ID z grup. Można też po dacie dodania rekordu... o ile takie pole sobie gdzieś wcześniej zapisałeś.

Podobne pytania

0 głosów
0 odpowiedzi 147 wizyt
pytanie zadane 22 listopada 2019 w SQL, bazy danych przez antypop Mądrala (5,720 p.)
0 głosów
1 odpowiedź 1,596 wizyt
pytanie zadane 26 maja 2017 w SQL, bazy danych przez Milesq Nałogowiec (32,020 p.)

92,081 zapytań

140,737 odpowiedzi

317,696 komentarzy

61,401 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia w koszyku, uzyskując rabat aż -50% (w dniach 24.11 - 29.11 z okazji Black Friday, a potem będzie to -30%) na bilety w wersji "Standard"! Więcej informacji na temat akademii znajdziecie tutaj. Dziękujemy Sekurakowi za tak fajną zniżkę dla 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 15% 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!

...