A legnagyobb érték szűrése

patron képe

Sziasztok!

Valószínű, hogy egy nagyon kezdő kérdést teszek fel, de napok óta google-zom a dolgot és nem akadok a nyomára.

Van egy tartalomtípusom 4 mezővel:
- név
- korcsoport /lista/szöveges//
- versenyszám /lista/szöveges//
- idő /text field/
A nézetben ahol megjelenítem, a versenyszám egy felfedett szűrő és korcsoportonként rendezve jeleníti meg a versenyzőket.
Egy korcsoporthoz versenyszámonként több versenyző is tartozik különböző időkkel.
Én azt szeretném, hogy a leválogatásban korcsoportonként csak 1, a legjobb idővel rendelkező jelenjen meg.
Hogyan lehet megadni a szűrésnél, hogy a legnagyobb értéket szűrje le?

Előre is köszönöm a választ.
Zsolt

Melyik modulhoz, modulokhoz kapcsolódik a téma?: 
Drupal verzió: 
ipeto képe

Szerintem az megfelelő lenne, ha az idő alapján rendezed növekvő sorrendbe, aztán a lapozó részben beállítod, hogy megadott számú elemet (egyet) jelenítsen meg.

0
0
patron képe

Köszönöm a válaszod.
Azt hiszem nem fejtettem ki világosan a kérdést.
Szóval van 12 korcsoportom, ami alapján növekvő sorrendbe van rendezve a táblázat. Korcsoportonként csak 1 jelenhet meg, mert ez egy olyan ranglista szerűség. Ezért szeretném először leszűrni a legjobb eredményt korcsoportonként és utána megjeleníteni mind a tizenkettőt egymás alatt.
Ott akadtam el, hogy hogyan lehet megjeleníteni szűrésnél a legmagasabb értéket?
Lehetséges hogy nem helyes a gondolatmenetem és ezért nem tudok elvonazkoztatni ettől a megoldástól.

0
0
Phoere képe

Az SQL-ben a MIN() függvény szolgál arra, hogy egy oszlop leválogatott értékei közül kiválaszd a legkisebbet. Azaz miután a lekérdezésben szűrtél versenyre és korcsoportra a SELECT utasításban, a maradék sorok idő értékeiből kiválaszd a legkisebbet (a nyertes idejét), majd ehhez a nevet.

Na ez a MIN() (és a fordítottja a MAX() ) szerintem nincs beépítve a Views-ba, így nem fogod tudni összerakni, amit szeretnél. Vagy csinálsz egy saját node.tpl-t és abban egy saját lekérdező függvénnyel összerakod, amit szeretnél vagy beveted a Vews PHP modult, amiről le fognak beszélni.

0
0

Csökönyi Ferenc

ipeto képe

Javagyúgy, félreértettem. Namost a következő megoldás bizonyára nem a legjobb, alighanem már gányolásnak minősül és a teljesítményre sincs jó hatással. De jobbat, elegánsabbat sajnos nem tudok létrehozni.
Készítesz egy nézetet, ami adott korcsoportnál megjeleníti az első legjobbat, a korcsoport id-ját szövegkörnyezeti szűrőként megadva neki. Aztán készítesz egy másik nézetet, amiben szükség lesz a views_php modulra. Ebben a nézetben csak a korcsoportok id-ját (meg a nevét) kérdezed le. Továbbá hozzáadsz egy PHP-mezőt, amiben a views_get_result() függvénnyel meghívod az első nézetet és átadod neki argumentumként az adott korcsoport id-ját.

0
0
pp képe

Attól félek erre egyszerűbb egy saját query-t írni.

Itt találsz egy jópofa megoldást a problémára: http://stackoverflow.com/questions/12102200/get-records-with-max-value-f...

itt találsz rá példást, hogy egy kis query_alterrel hogyan tudod átírni a views query-t.
http://drupal.stackexchange.com/questions/73/custom-query-in-views

(ehhez már modult kell fejleszteni.)

Persze, lehet hogy van egyszerűbb megoldás.

pp

0
0
patron képe

Hú, nagyon köszönöm mindenkinek.
Sajnos az én tudományom nem ér túl a kattingatós megoldásoknál. Azt hittem, hogy a legnagyobb érték szűrése sokkal hétköznapibb kérdés, minthogy valami új dolgot kelljen összeszegelni.
Nekifekszem ennek a views php dolognak, vagy valami egyszerűen beépíthető lekérdezésnek.
Jelenleg tanácstalan vagyok.

0
0
knorbi képe

Én modult írnék rá, de ha ez sok, akkor esetleg a következő megoldás jó lehet.

Felteszed a Views Field View modult. Ezzel egy views lekérdezésbe egy másik views lekérdezést lehet beilleszteni mezőként.

Kulcsszavakban:

korcsoportok_legjobbjai views
mezők: korcsoport, név
rendezés: idő
pager: Display a specified number of items 1
contextual filters: versenyszám

versenyszam views
mezők: versenyszám, Global: Views (ebben megadod az előző views lekérdezést)

Tehát az egyik lekérdezésen belül lesz egy másik lekérdezés, ami szövegkörnyezeti szűrőként meg fogja kapni a külső lekérdezés megadott mezőjét. Ezen felül sorbarendezzük idő szerint és csak egy rekordot engedünk megjeleníteni.

Remélem érthetően hadováltam...

1
0

Kiss Norbert
adatmentespecs.hu

patron képe

Köszi, ez megvalósíthatónak tűnik számomra, este nekifekszem és referálok az eredményről.

0
0
silversk8r képe

Van kattintgatós módszer is. Views 3-ban a 'Use aggregation' bekapcsolása után elérhetővé válnak a mezők min/max/sum stb. lehetőségei. Tehát nem a szűrőknél, hanem a mezők beállításainál.
Count, sum, average, min, max in Views

Ha ez valamiért nem lenne elég: views_aggregator.

1
0
patron képe

Köszönöm, erre a modulra pár napja már ráakadtam, de sajnos nem tudom rávenni hogy azt tegye amit én szeretnék.
Ha van vele tapasztalatod, egy pár szóban megosztanád légyszíves?

0
0
silversk8r képe

Sajnos személyes tapasztalatom nincs vele, ha nem volt elég a Views modul és inkább saját modullal oldottam meg.
Viszont az alap Views modul is meg tudja oldani a problémádat. Ha nem működik megfelelően a MAX(idő) az aggregáció beállítása után (ebben tudok segíteni), akkor próbáld meg átallítani az idő mezőt szövegesről számmá. Kattintgatós megoldáshoz használhatod pl. ezt: hms_field modul.

0
0
ipeto képe

Nekem pont most volt hasonlóra szükségem (megszámolni, hogy egy tartalomhoz hány másik tartalmat csatoltak) és a views összevonás funkciója teljesen jól működött:
- A views felületének jobb oldalán, a haladó szekció > Egyebek-ben bekapcsolod az Összevonás használatá-t
- Ekkor a mezők, szűrök, rendezés minden eleme mellett megjelenik az összevonás beállítása link
- Amelyik elemnél erre szükség van, ezen belül választhat néhány statisztikai jellemző (mennyiség, összeg, min, max, szórás) közül. Erősen meglepődnék, ha egy dátum/idő formátumú mező értékeiből nem számolná ki a minimumot.
- Még arra lenne szükség, hogy a Formátum > Formátum > Beállításokban csoportosíts a korcsoportok szerint. Azt gondolom, így minden korcsoportban csak a legjobb időeredmény jelenne meg.

0
0
silversk8r képe

igen, az Összevonás angolul az a Use aggregation amiről korábban írtam. Hirtelen nem ugrott be magyarul.

0
0
aboros képe

csak úgy elég manuális lesz. korcsoportonként egy-egy blokk van berakva egymás alá, ez ahány korcsoport, annyi views block lesz, mert mindegyikben másik szűrő kell majd a korcsoportra.

vagy egy page manager oldal, amibe egymás alatt 12x szerepel ugyan az a view, ami kapott érték alapján adott korcsoport legjobbját visszaadja. ekkor csak egy nézet kell és azt kell "csak" berakni 12x és mindig beállítani hogy a contextual filter most éppen melyik korcsoport legyen. hátránya többek között leginkább az lesz, hogy ha holnap lesz egy új korcsoport, mégegyszer hozzá kell adni a nézetet a page manager oldalhoz.

de legalább egy betü kódot nem kell írni. :)

1
0

-
clear: both;

patron képe

Először is köszönöm nektek, hogy ilyen sokan foglalkoztatok a problémával. Végigpróbáltam az ötleteket, az elsőket sajna nem mert kódokba belebabrálni sajna nem megy. A views field view nagyon hasonló mint amit aboros ajánlott csak modul formában. A kimenetük nem tetszett és azok az extra szűrések amiket hozzá kell még adnom, nagyon megbonyolította volna.
Sok próbálkozás után végül is megszületett a megoldás kattingatósan és tisztán.
A kulcsszó: Views Aggregator Plus.
Ez a modul kiterjeszti a nézet formátumait egy Table with aggregation options lehetőséggel. Ennek a beállításaiban meg lehet adni, hogy soronként vagy oszloponként hogyan reagáljon.
Leírom, hogy mit tettem, mások okulására.

Formátum:Table with aggregation options

MEZŐK
Tartalom: Korcsoport (Korcsoport)
Tartalom: Név (Név)
Tartalom: Versenyszám (Versenyszám)
Tartalom: Versenyidő (Versenyidő)

SZŰRÉSI FELTÉTEL
Tartalom: Közzétéve (Igen)
Tartalom: Típus (= aktuális típus)
Tartalom: Versenyszám (felfedett)

RENDEZÉSI SZEMPONT
Tartalom: Korcsoport (növekvő)
Tartalom: Versenyidő:format (növekvő)

Table with aggregation options beállítása:
A korcsoport mezőnél be kell pipálni a Apply group function-t és a megjelenő ablakban bejelölni a Display first member és a Group and compress lehetőségeket.
A lapozónál kiválasztani a minden elem megjelenítése opciót.
Ezzel kész is

Mi is történik. Gyakorlatilag mint a views field view és aboros megoldásában, csak elegánsabban.
Nem a legkisebb értéket kell kiválasztani, hanem sorba rendezni először korcsoport, majd versenyidő szerint, utána a Table with aggregation options korcsoportok sorában csoportosít és leválasztja az első értéket, ami a legkisebb.

Lehet hogy nem ez a legprofibb megoldás, de ez működik textfield mezőben lévő számmal és a hms_field modul által generált mezőben lévővel is.
Sajna nem jöttem rá, hogy a minimum kiválasztását hogyan oldhatom meg egyenesen. Sőt egy csomó megválaszolatlan kérdés van a fejemben, de azokat máshol, máskor.

Update: Miközben ezeket a sorokat írtam beugrott, hogy nem próbáltam idő sorbarendezés nélkül a Table with aggregation options kategória sorában a Group and Compress és a Minimum beállítást, ami a legkézenfekvőbb lenne. Megtettem, láss csodát működik :). Mentségemre amíg megértettem a modult nagyon sok beállítást próbáltam és elkavarodtam.
Természetesen ahogy aboros írta valahol, azért szeretjük a Drupal-t, mert nagyon sokféle megoldást kínál.

Mégegyszer köszönöm mindenkinek

7
0