![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 561 Pomógł: 3 Dołączył: 2.02.2009 Ostrzeżenie: (0%) ![]() ![]() |
Zapytanie nie bierze pod uwagę tego kawałka (Select * from products order by version DESC), a we wcześniejszych wersjach SQL działało poprawnie, moje pytanie brzmi czy coś się rzeczywiśćie zmieniło i czy jest jakieś wyjście z tej sytuacji? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Ale żeś powiedział.... No to teraz muszę użyć magicznej kuli i dowiedzieć się jaką miałeś wcześniej wersje i jaką masz teraz... Ale na moje oko to wszystko jest poprawnie.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 6 807 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 561 Pomógł: 3 Dołączył: 2.02.2009 Ostrzeżenie: (0%) ![]() ![]() |
Zainstalowalem nowego xamppa z mariaDB nie pamietam jaka wersje mialem wcześniej ale to bylo ze 3 lata wstecz. Zapytanie komplikuje dlatego ze chce pobrac tylko najnowsze wersje.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 807 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Te 2 zapytania nie różnią się wynikiem, jeśli nie ma klauzuli LIMIT w podzapytaniu.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 561 Pomógł: 3 Dołączył: 2.02.2009 Ostrzeżenie: (0%) ![]() ![]() |
Ale z limitem sciagnie mi tylko 1 rekord
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 807 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Z LIMIT ściągnie tyle rekordów ile zadasz.
W obecnej chwili (bez LIMIT), obydwa zapytania są dają ten sam wyniki. A sortowanie zakłada się na cały wynik, czyli w Twoim przypadku po GROUP BY. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 561 Pomógł: 3 Dołączył: 2.02.2009 Ostrzeżenie: (0%) ![]() ![]() |
W takim razie masz jakiś pomysł jak takie zapytanie napisać?
Wymyśliłem już coś takiego, żeby przeczesał już zgrupowane i żadnej poprawy Dobra małymi krokami na konkretnym przykładzie
pokazuje mi GID | nazwa | nr | wersja 4000 | Woda gazowana| 35 | 4 1575 | Woda gazowana| 35 | 3 1232 | Woda gazowana| 35 | 2 13 | Woda gazowana| 35 | 1 ale
GID | nazwa | nr | wersja 1575 | Woda gazowana| 35 | 3 a powinno GID | nazwa | nr | wersja 4000 | Woda gazowana| 35 | 4 Ten post edytował neo1986kk 5.09.2016, 14:33:00 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 6 807 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Wydaje mi się, że nie czytasz dokładnie postów.
Podałem Ci przykład w moim pierwszym poście. Podzapytanie nie jest potrzebne. Kolejność ustalasz na końcu. |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 561 Pomógł: 3 Dołączył: 2.02.2009 Ostrzeżenie: (0%) ![]() ![]() |
@trueblue - Twoje zapytanie również zwraca mi wersję 35/03 a nie 35/04
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 6 807 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Co dowodzi, że zapytania dają ten sam wynik.
Teraz podaj kawałek danych dla products, product_types, customers (podałeś tylko dla products i to z innymi nazwami kolumn niż w zapytaniu) i napisz jaki miałby być dla nich wynik. |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 561 Pomógł: 3 Dołączył: 2.02.2009 Ostrzeżenie: (0%) ![]() ![]() |
Tabela products
GID | name | type | number | version | client | 4001| Woda niegazowana| 1 |34 | 3 | 5984 4000 | Woda gazowana| 1 | 35 | 4 | 5984 1680| Woda niegazowana| 1 |34 | 2 | 5984 1575 | Woda gazowana| 1 |35 | 3 | 5984 1232 | Woda gazowana| 1 |35 | 2 | 5984 14| Woda niegazowana | 1 | 34 | 1 | 5984 13 | Woda gazowana | 1 | 35 | 1 | 5984 Tabela products_types GID | type 1 | Butelka platikowa 2 | Butelka szklana Tabela customers GID | name | 1 | Coca cola HBC Polska 2 | Polska Woda Sp. z o.o. 5984 | Womir - Spa Sp. z o.o. Chcę wydobyć tylko najwyższe wersje produktów czyli wynik powinien być taki GID | name | type | number | version | client 4001| Woda niegazowana| Butelka plastikowa |34 | 3 | Womir - Spa Sp. z o.o. 4000 | Woda gazowana| Butelka plastikowa | 35 | 4 | Womir - Spa Sp. z o.o. A dostaje coś takiego: GID | name | type | number | version | client 4001| Woda niegazowana| Butelka plastikowa |34 | 3 | Womir - Spa Sp. z o.o. 1575 | Woda gazowana| Butelka plastikowa | 35 | 3 | Womir - Spa Sp. z o.o. |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 6 807 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Przyjrzyj się dobrze, bo nie ma grupowania po version, a może powinno być. |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 561 Pomógł: 3 Dołączył: 2.02.2009 Ostrzeżenie: (0%) ![]() ![]() |
No dobra już wiem, tu jest inny wałek, Twoje zapytanie działa w ten sam sposób co moje tylko chyba trzeba będzie zmienić max (gid) na max(version) bo GID pobiera od wersji 4 a wyświetla, że to wersja 3, i to moje pierwsze zapytanie robiło to samo.
Edit:: max(version) to już w ogóle inne wyniki pokazuje, czyli coś jest nie tak z bazą? skoro pokazuje GID jest ok a przypisana do niego wersja nie pasuje:/ Edit:: dodałem do grupowania p.version to mi wyświetla teraz wszystkie wersje, ale przynajmniej przypisane odpowiednio do GID Ten post edytował neo1986kk 5.09.2016, 16:34:32 |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 6 807 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 561 Pomógł: 3 Dołączył: 2.02.2009 Ostrzeżenie: (0%) ![]() ![]() |
No właśnie to dopisałem, nic no dzięki za chęci, jakoś sobie poradzę...
Dobra udało się :
Dzięki Ten post edytował neo1986kk 5.09.2016, 16:41:14 |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 6 807 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Źle.
Sprawdź co by było gdyby produkt 4001 lub 4000 miał version=1. Trudno mi jest Ci pomóc, bo nie do końca wiem jaką zasadą kierować się przy wybieraniu tych rekordów. Taki wynik można uzyskać również wybierając wszystkie produkty według malejącego GID i LIMIT 0,2, ale może Ty chcesz wyciągnąć jakieś top z grupy. |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 561 Pomógł: 3 Dołączył: 2.02.2009 Ostrzeżenie: (0%) ![]() ![]() |
Dokładnie. Chcę wyciągnąć top. mam 5000 produktów, które po prostu dostają nowe wersje i zawsze chcę pobierać najnowszą wersję produktu, a w SQL nie zmienia się nic oprócz pola version w tabeli na przykład z 2 na 3, ale wersję 2 też muszę trzymać w bazie
|
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 6 807 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Grupowanie względem number (zakładam, że to id produktu).
Z każdej grupy wybrana najwyższa wersja.
|
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 561 Pomógł: 3 Dołączył: 2.02.2009 Ostrzeżenie: (0%) ![]() ![]() |
To zapytanie zwraca mi 901 wyników, a powinno 4725. Druga sprawa jest taka, że dla niektórych produktów wersja jest równa 0, a takie produkty nie istnieją.
Edit: To chyba trzeba będzie zrobić dwoma zapytaniami. Najpierw wybrać najwyższe GID, a potem drugim zapytaniem resztę cech produktu. Ten post edytował neo1986kk 6.09.2016, 10:15:12 |
|
|
![]()
Post
#21
|
|
Grupa: Zarejestrowani Postów: 6 807 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Nie zakładałbym, że czym wyższy GID, to tym wyższa wersja produktu. Może masz tak w przypadku 100%, ale...
Względem czego ma być wybrana najwyższa wersja? Produktu? Jest, ale wspominałem, że number uznaję za unikalny identyfikator produktu. Produktu i producenta? To trzeba dodać grupowanie po p.client - będziesz mieć więcej rekordów. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 8.10.2025 - 15:47 |