Keresés

Új hozzászólás Aktív témák

  • pittbaba

    aktív tag

    Sziasztok!

    Androidra fejlesztek BKV programot, ennek az adatbázisához kellene finomításhoz segítség, tipp nekem.
    A BKV kiadja a teljes menetrendet a Google GTFS adatbázis formátumban.
    Ebből készítek egy programmal egy SQLite adatbázisfájlt, amit az alkalmazás felhasznál az adatok kivételére.
    Ez egy 159Mb-os adatbázis file, egy telefonnak elég leterhelő, sajnos egy lekérdezés több perc jelenleg.

    Gps koordináták alapján próbálom kiszedni a user melyik megállóban áll, és milyen járatok haladnak át azon a megállón.
    Három táblát kell ehhez felhasználnom:
    stops táblában vannak a megálló nevei és a GPS koordináták
    stop_times táblában az időpontok vannak megadva, melyik percben melyik megállóban melyik járat megy(id)
    trips táblában vannak a trip id-hoz tartozó nevek.

    Egyértelmű, hogy a stop_times tábla nagyon nagy, úgy emlékszem, hogy 200 000 sor körül van, e miatt nagyon lassú lesz a lekérdezésem. JOIN-al összekapcsoltam a három táblát, az eredmény több perc után, de megérkezik helyesen egyébként.

    Hogy lehetne gyorsítani a lekérdezést?
    Az adatbázis feldarabolása nem jó, mert megállókra lehetne szétbontani, de az is 4000 fájlt jelentene, ami megint nem megoldás.

    Mivel létre kell hozni egy külön SQLite adatbázis fájlt, nehéz bármit is változtatni az eredeti formátumon, mivel a GTFS fájlok sima CSV formátumú fájlok, nem könnyű dolgozni velük.

    Milyen tippekkel tudtok segíteni?

    PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

  • pittbaba

    aktív tag

    válasz modder #1595 üzenetére

    Itt a BKK GTFS db, csak hogy ne kelljen keresgélni:
    [link]

    Példák:
    stops:
    stop_id,stop_name,stop_lat,stop_lon,location_type,parent_station,wheelchair_boarding
    F00001,"Mihály utca",47.486079,19.034561,,,2

    stop_times:
    trip_id,arrival_time,departure_time,stop_id,stop_sequence,shape_dist_traveled
    A651191,03:46:00,03:46:00,F04679,010,0

    trips:
    _id,service_id,trip_id,trip_headsign,direction_id,block_id,shape_id,wheelchair_accessible,trips_bkk_ref
    6100,A65119ASZGPP-021,A651191,"Örs vezér tere M+H",1,A65119ASZGPP-021_10A,1226,2,61001

    A gps koordináta kerekítés elve megvan, de mivel az szerintem még lassabb lesz, egyelőre megálló névre keresek rá:

    SELECT stop_name,stops._id,stop_times._id,trips._id FROM "+MYDATABASE_TABLE+" JOIN stop_times ON stops.stop_id= stop_times.stop_id JOIN trips ON stop_times.trip_id = trips.trip_id WHERE stops.stop_name LIKE '%"+searchstr[0]+"%' GROUP BY stop_times.stop_id"

    Ha azt kérem: Deák tér, meg is kapom vissza, szóval megleli, de kb 10 perc alatt, mert a stop_times tábla nagyon nagy és végig kell nyálazza. Olvastam, hogy létre lehet hozni index-et a tábla oszlopaihoz, milyen oszlopokhoz érdemes? Ez után az eredeti lekérdezést kell használni továbbra is, csak az adatbázison gyorsít valamennyit?

    Nem tudtam jól megfogalmazni a módosítással mit akartam mondani. A lényeg, hogy lenne olyan megoldás is, hogy a három táblából csinálok egy leegyszerűsítettet, melyik GPS koordinátákhoz mely járatok tartoznak, viszont mivel az alapformátum CSV és a célformátum mysqlite db fájl, nehéz olyan scriptet írni ilyen sok sorú fájlnál, ami nekem ezeket összemergeli egy táblába logikusan. A kész db táblákból csinálni egy újat is lassú, mert ugyanúgy soronként kell haladni.

    UI: A GPS koordináták kerekített lekérdezését így oldom meg, hogy legyen hibahatár:
    SELECT * FROM "+MYDATABASE_TABLE+" WHERE ( stop_lat > '"+latstart+"' AND stop_lat < '"+latend+"' ) AND (stop_lon > '"+lonstart+"' AND stop_lon < '"+lonend+"')

    Egyszerű, működik, de gondolom bazi lassú lesz :S

    [ Szerkesztve ]

    PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

  • pittbaba

    aktív tag

    válasz Sk8erPeter #1599 üzenetére

    Látatlanban? Ott van minden már, épphogy az adatbázist nem csatoltam :D
    Indexelni melyik táblákat érdemes? Egyelőre csak a stop_times.stop_id-t, és a stops.stop_name -t indexeltem. Explain-t nem vágom, guglizom, nézem, de jöhet tipp!

    PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

  • pittbaba

    aktív tag

    válasz Sk8erPeter #1601 üzenetére

    Rendben :) az Explain kimenetét majd mutatom, ha egyszer kikergeti.

    PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

  • pittbaba

    aktív tag

    válasz Sk8erPeter #1599 üzenetére

    Az explain kimenetéből mire vagy kíváncsi? Nem tudom copyzni a kezelőprogrammal sajnos, de ami fontos azt bepötyögöm.

    PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

  • pittbaba

    aktív tag

    válasz modder #1604 üzenetére

    Wow! Köszönöm a rengeteg infót, átrágom rajta magamat részletesen is.
    Első körben annyit, hogy azért lenne jobb a három tábla összekapcsolása, mert nekem GPS alapján az lenne jó, ha a a lehetséges járatnevek jönnének ki, ne kelljen megállót választania külön. Általában az ember azt tudja mire akar, mire kell felszállni és nem a megálló pontos nevét.

    A group-ban teljesen bizonytalan voltam, azt köszönöm hogy tisztáztad a fejemben.
    Az indexelésekkel kezdem, majd a stop_times feldarabolása lesz következő lépés az optimalizálás terén, én is azt találtam jónak,ha stop_id alapján szedem széjjel.

    Még egyszer nagyon köszönöm! Ha bármilyen ötleted van még ,írd meg.

    PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

  • pittbaba

    aktív tag

    válasz Jim-Y #1610 üzenetére

    Igen, ez lesz a megoldás erre, offline kevesebb szolgáltatás...

    Sajnos valóban egy kvnyi idő egy lekérdezés még így is, darabolnom kell, vagy egyszerűsíteni.
    Turista fejjel gondolkozok. Annak lehet nem megy a mobilnetje itthon, ezért akarom vmi offline módon megoldani.

    PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

  • pittbaba

    aktív tag

    válasz modder #1613 üzenetére

    Szia!

    Igen, pont ezzel kísérleteztem az elmúlt órában, hogy külön vettem a lekérdezéseket megnézem mi mennyi idő, de sajnos egy sima alap select is 10-30mp míg lefut a fájlban, nincs más választás.
    Az indexel kapcsolatban sajnos nem értem a kérdésedet? Betöltöttem az adatokat? (Azok benne vannak már az indexelés előtt :D )
    Hogy érted ezt?

    PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

  • pittbaba

    aktív tag

    válasz modder #1616 üzenetére

    szerintem semmit sem gyorsított, valószínűleg ezért.. nem is értettem hogy működhet ilyen gyorsan az indexelés.. most már értem :) tábla létrehozáskor kell indexelni és úgy nyomni a konvertálást. Akkor belepötyögöm a konverter appba, hogy indexeljen és lefekvés előtt elindítom, hátha gyorsabb lesz a db.

    Szerinted ha csinálok egy selectet where nélkül, összejoinolva a táblákat, majd a kimenetet feldolgozom úgy, hogy építek belőle egy újabb összegző táblát az nagyon gáz lesz, vagy az is egy lekérésnyi időt vesz majd igénybe? Nem tudom ez a része hogy működik.

    PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

  • pittbaba

    aktív tag

    válasz Ablakos #1618 üzenetére

    SQLIte

    PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

  • pittbaba

    aktív tag

    Sziasztok!

    Na a fentebb említett problémával még mindig küzdök, nézem mi lehetne jó megoldás. Meguntam a 10 perces lekéréseket, serveren tesztelnék sebességet mysql-el hogy tudjak haladni, viszont a GTFS adatbázisát sehogy nem bírom betolni a távolni server adatbázisába.
    Sajnos sima havidíjas tárhelyem van, semmi ssh lehetőség, így nem tudom megoldani azt, hogy a 150 mb-os adatbázist beimportáljam. A phpmyadmin lenne az egyetlen lehetőségem, de az sem tudja fogadni a 120 megás stops_times.txt-t. Csináltam az itthoni lomhább serveren egy adatbázist a GTFS-ből, SQL formátumban exportáltam, ezt a fájlt szeretném valahogy a távoli serverbe bepasszírozni, milyen megoldásokat tudtok ajánlani?
    Próbáltam a LOAD DATA-val de nincs jogosultságom írni az adatbázist ezzel. Gondolom külön acc vonatkozik arra ami lenyúl a winyóra.

    Találtam olyan megoldást, hogy csinálok egy php fájlt, és mysql_query("source db.sql") parancsal beszippantom a file-t, de szintaktikai hibát ír:

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SOURCE db.sql' at line 1

    Elvileg ennek mennie kell? Hol a szintaktikai hiba? Vagy az elérési úttal lehet gondja? Csak az meg io hiba nem szintaktika.

    Hogy lehetne ezt a 150 megát php-n keresztül megetetni vele? Már kifogyok az ötletekből :W

    PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

  • pittbaba

    aktív tag

    válasz Sk8erPeter #1621 üzenetére

    Jah csak az a bajom h az eredeti feladattól már annyira eltértem, hogy ilyen még az életben nem volt, most már ott tartok h a 100. szálon most adatbázis darabolós fájlonként egyesével importálgatósat kell játszani, ez botrány, hogy nem tud az ember egy 150 megás adatbázist átmozgatni szerverről szerverre. Megérteném 100 gigánál, de így...

    Épp keresem, de hátha gyorsabban érkezik a válasz: mysqldump-nál van olyan, hogy táblánként dumpolja fájlba, mert találtam egy megoldást, de a maximum memóriaméretet 3 megával túl lépem, úgyhogy elég az egyik táblát külön venni, és elvileg megoldható lesz ( aztán lehet hogy tévedek ).

    PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

  • pittbaba

    aktív tag

    válasz pittbaba #1622 üzenetére

    Megvan :) db név után tábla névvel kell paraméterezni a mysqldump parancsot.
    Kíváncsi vagyok így már megeszi e.
    Amit próbálok php-ból, megosztom, hátha segít, vagy kiderül hogy rossz ( most kb 40 perc míg feltöltődik az új sql fájl, addig nem tudom tesztelni )

    $query = file_get_contents("filename.sql");
    $ret = mysql_query($query) or die(mysql_error());

    PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

  • pittbaba

    aktív tag

    válasz Sk8erPeter #1625 üzenetére

    Megnézem, remélem működni fog, köszönöm. Kerülni szerettem volna a plusz patkolásokat, azért írtam, hogy így is olyan messze vagyok az igazságtól, hogy nem szívesen veszek bele még még még plusz lépéseket, eszközöket, de remélem ez működni fog, majd reportolom :)

    A megoldást ahogy írtam is, abban reméltem, hogy ha táblákra szétszedem a fájlokat, akkor már menni fog, mert kevesebb műveletet kell futtatnia egy kérés alatt. Egyel jobb is lett, viszont lett helyette másik korlát:
    Got a packet bigger than 'max_allowed_packet' bytes

    Ezért most jön a tipped kipróbálása. :)

    PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

  • pittbaba

    aktív tag

    válasz modder #1624 üzenetére

    Nem sokkal lőttél alá a teljesítménynek, nincs alám pakolva egy erőmű, és mivel a stop_times tábla 2,5 millió soros ( mint kiderült.. :D ), még azt is megizzasztja. Helyi szerveren annyi előnyöm van, ha csinálok egy 10 perces lekérést, le tudom lőni az sql szervert, és nem kell várnom timeoutig minden alkalommal :)

    A szolgáltatóm phpmyadminja nem tud ilyet sajnos, én is ezt kerestem volna :(
    Tudom, hogy csv-t is tud fogadni, viszont nem vágja hogy az első sorából táblát kéne csinálni, így gyorsabb az sql, mint megint kézzel megcsinálni a táblákat...

    PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

  • pittbaba

    aktív tag

    válasz vgyuri #1626 üzenetére

    Szia! Ez jónak tűnik, bár hasonlót csináltam én is, most egy egyben sql fájlt szeretnék berántani, hogy már ne kelljen táblákat csinálgatni.
    A karakter cseréknél szerintem lenne gond egyébként, ahogy emlékszek, nekem ennyi csere nem volt elég valahol elszállt.
    Asszem a stops.txt-ben van olyan állomásnév, ahol pl: "Csepel, Kis csőröge, Nagyállomás" a tartalom, replace után: '"Csepel',' Kis csőröge',' Nagyállomás"' És már rögtön több az érték mint az oszlop a sorban. :)

    PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

  • pittbaba

    aktív tag

    válasz Sk8erPeter #1625 üzenetére

    Köszönöm, hogy rám szóltál, a link alatti kis php script nagyon szépen működik. Gyors, szép kód, jó megoldás!

    [ Szerkesztve ]

    PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

  • pittbaba

    aktív tag

    Sziasztok!

    Újra itt, még mindig nyitva a [link] kérdésem, sok tanácsot kaptam az óta, de túl sok eredményt nem sikerült elérnem.
    Szeretném valamilyen módszerrel leegyszerűsíteni az adatbázist, hogy kezelhetővé váljon.
    Sajnos a 2,5 millió soros stop_times tábla az egyetlen módja, hogy összekapcsoljam bármelyik tábla adatait egy másikkal.
    Röviden: GPS koordináta alapján szeretném megkapni a koordinátákhoz tartozó megállóhoz tartozó járatokat.
    Ehhez az út: stops Join stop_times join trips join routes
    Sajnos fél úton máris kiakad a mysql szerver, a routes táblához joinolva, már 1-es limitnél is hibát kapok vissza.
    Ha csak a trip id-t akarom a stop_name mellett, 1000-es limitnél már hibát ír:

    SQL-kérés: Dokumentáció

    SELECT stop_name, trips.trip_id
    FROM stop_times
    JOIN stops ON stop_times.stop_id = stops.stop_id
    JOIN trips ON stop_times.trip_id = trips.trip_id
    LIMIT 1000

    MySQL jelzi: Dokumentáció
    #1317 - Query execution was interrupted

    Szerintetek milyen úton lenne érdemes leegyszerűsíteni a táblákat ahhoz, hogy a fent leírt feltételeket tudja az adatbázis teljesíteni.

    PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

  • pittbaba

    aktív tag

    válasz Sk8erPeter #1633 üzenetére

    A "hatalmas SQL adatbázis importálása sql fájlból probléma" megoldódott teljesen! Köszönöm, ez volt a leghelyesebb megoldás!

    PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

  • pittbaba

    aktív tag

    válasz modder #1637 üzenetére

    Nem szükséges, csak kísérletezek ha már .. :)
    Most egyelőre ott tartok, hogy négy lépésben egyszerűsítem a táblákat:
    CREATE TABLE xy AS (SELECT col FROM a JOIN b .... )

    Minden szépnek és jónak tűnt, de valami mégsem jó, pl a Blahánál nem jár a 7-es busz az én adatbázisom szerint :W

    Még át kell gondolom ezt kicsit...

    PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

  • pittbaba

    aktív tag

    válasz Sk8erPeter #1642 üzenetére

    Hallgattam a tanácsokra, de szerintem az indexelés dolgot rosszul csinálom, kezd gyanús lenni.
    Egyébként már felpakoltam idegnagy szerverre, szóval a vas része megoldódott, nem bosszantom tovább magam az arm procival,csak ha lesz egy céljaimnak megfelelő adatbázis. ( Bár android okosításba kezdtem, SQL feladat lett belőle :D ).

    Az indexeléssel kérdés:
    Sajnos az id-k néhol betűt is tartalmaznak, így csak fulltext indexet enged a mysql. Fulltext indexet ráteszem a kellő mezőkre, ez is megvolt, de nem gyorsult érezhetően.
    Újra kell indexeltetni valamilyen paranccsal a táblát? Vagy az adatokat is teljesen újra kellene tölteni a táblába? :F
    Fórumon írnak sok mindent itt-ott, azt találtam REPAIR-el valahogy megoldható hogy a már táblában lévő tartalmat újraindexelje a mySQL.

    Indexelt táblákat dumpoltam ki a saját szerveremről a távoliba, de most ahogy nézem az export file-t nincs benne indexelés, nem hozta az export, így újra kell az egészet.

    Végre Mysql-en tudok explain kimenetet adni:

    id select_type table type possible_keys key key_len ref rows Extra
    1 SIMPLE routes ALL NULL NULL NULL NULL 313
    1 SIMPLE trips ALL NULL NULL NULL NULL 134307 Using where; Using join buffer
    1 SIMPLE stop_times ALL NULL NULL NULL NULL 2555175 Using where; Using join buffer

    [ Szerkesztve ]

    PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

  • pittbaba

    aktív tag

    válasz modder #1636 üzenetére

    Köszi mindenkinek az indexelés miatti nyaggatást, végig azt szúrtam el, tiszta lappal újra kezdtem, indexelve, végre tök gyorsan lefutnak a lekérdezések! :R :R

    Kaptam a GTFS fórumon egy okosságot, arra a kérdésemre a választ, hogyan lehet kiszedni a GTFS formátumból azt, hogy egy megállón milyen járatok haladnak át (Az összes járat összes megállóját), megosztom veletek:
    create table rstops as
    select route_id, direction_id, a.stop_id, stop_name from
    (select distinct route_id, direction_id, stop_id from stop_times as st, trips as t where st.trip_id=t.trip_id)
    as a, stops as b where a.stop_id=b.stop_id order by 1,2;

    PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

  • pittbaba

    aktív tag

    válasz modder #1655 üzenetére

    Az most fog eldőlni, majd reportolom. Egyébként ha nem is lesz gyorsabb, de legalább létre tudtam hozni egy jóval kisebb táblát, amiben benne vannak azok az adatok amik nekem kellenek. Az indexelés segített, hogy egyáltalán bármit tudjak kezdeni az adatbázissal 10-es limit nélkül :))

    Kérdés:
    Indexelésnél van e különbség, melyik a helyesebb:

    Új tábla hozzáadásánál KEY `stop_id` (`stop_id`),

    vagy a tábla létrehozása után a CREATE INDEX trips_tripid_idx ON trips(stop_id) ?

    PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

  • pittbaba

    aktív tag

    válasz Sk8erPeter #1657 üzenetére

    Köszi! Az angolom még mindig nem perfect, ezért bizonytalan vagyok, hiába találom meg én is ezeket, de okay. :)

    PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

  • pittbaba

    aktív tag

    válasz Sk8erPeter #1660 üzenetére

    Lesz? :D tizenx éve ezzel foglalkozok, és ebből élek, több szálon az rendben, nem egy valamihez értek nagyon, hanem a legtöbb igényelt munkát el tudom látni, és ennyi. Az hogy a msql legbelsőbb bugyraiban nem tudom, hogy a key, és a create index között van e időben vagy eljárásban különbség, nem okozott gondot még :)) A legtöbb programozási nyelvet angolul tanultam én, az megvan, hogy mit kell nézni, meg bambulom a példákat, és ha átírok valamit mi változik szenvedések, viszont egy-egy komolyabban megfogalmazott mondat fölött átsiklik a tekintetem, ezért jobb, ha megkérdezem, de már kezdem megbánni :U

    PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

  • pittbaba

    aktív tag

    válasz Sk8erPeter #1662 üzenetére

    Sorry, úgy gondoltam, alapból feltételezitek, hogy nem kérdezek olyankor, ha legalább minimálisan nem néztem utána, de legközelebb jelzem ezt.

    PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

  • pittbaba

    aktív tag

    válasz Sk8erPeter #1664 üzenetére

    Elég sokszor megtörténik :W :))

    PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

  • pittbaba

    aktív tag

    Sziasztok! Mit rontok el?
    Van a kérésemben egy feltétel exception_type <> 2, ha a kérésembe beteszem ezt a feltételt, akkor üres sorok jönnek ki, ha kikommentelem, akkor kijönnek az eredmények, olyanok is, amiknél az exception_type értéke NULL. Miért nem igaz a feltétel mégsem?

    PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

  • pittbaba

    aktív tag

    válasz Lortech #1700 üzenetére

    Köszönöm!

    Közben azt találtam, hogy IS NULL illetve IS NOT NULL -al kell a feltételt megírni, és akkor működik. Köszönöm!

    PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

  • pittbaba

    aktív tag

    Sziasztok!

    Elég érdekes kérdésbe futottam:
    Apróhirdető oldal, szűrések.
    Vannak kategóriák, a kategóriáknak pedig sajátos mezői, pl ha ingatlant választ, akkor kijön h szobák száma, ha autót választ akkor futott kilóméter stb, kb ezer ilyen custom mező jelenhet meg.
    Mivel ez nem lehet egy táblában termékenként 1000 oszlopban tárolni, ezért a custom paramétereket úgy tárolom, hogy egy külön táblában elmentem az adott hirdetés id-ját, az adott paraméter nevét (custom_szobakszama, custom_kilomterek), és a hozzá tartozó értéket.
    Ez rendben is van, menti szépen, visszatölti szépen szerkesztésnél stb stb...

    Kérdésem az lenne, hogy hogy tudok ez alapján szűrni, keresni?

    Pl:
    Hirdetések tábla:
    id,feltöltő_id,hirdetés címe,hirdetés szövege,dátum,kategória1,kategória2,kategória3,
    1,110,Ingatlan hirdetés,Hirdetésem szövege,2015.10.10,45
    2,110,Autó hirdetés,Hirdetésem szövege,2015.10.11,48

    Custom mezők tábla
    id,hirdetés_id,mező_neve,érték
    1,1,szobak_szama,3
    2,1,terulet,32
    3,2,kmora,10000
    4,2,loero,10

    Ossze van joinolva 3 kategora tabla, es a user tabla is, ebbe a lekérdezésbe kellene megoldani, hogy WHERE-el keresni tudjak a customs mezők tábla alapján is. Pl ha az összes olyan hirdetést akarom ahol a szobak_szama =3 azt hogy tudom lekérni?

    Előre is köszi. :R
    Esküszöm megkeresném, mint mindig mindent, de ezt most fogalmam sincs hogy írjam be :DD

    [ Szerkesztve ]

    PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

  • pittbaba

    aktív tag

    válasz Szmeby #2850 üzenetére

    Én is így sok sok joinnal oldottam meg pont, csak mondom hátha van rá valami kíméletesebb megoldás is.
    Külön táblázást nagyon nem szeretem, mindig elszúrom valahol....

    PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

  • pittbaba

    aktív tag

    Sziasztok! Ritkán jövök egy egy brutál kérdéssel, hátha most is belöktök a jó irányba.
    Weblap, termékek feltöltése. Minden kategóriának és alkategóriának saját custom paraméterei ami felvihető a termékhez (monitornál átmérő, autónál köbcenti stb).
    Mivel végtelen nagy táblát kapnék, ezeket a custom adatokat külön táblákban tárolom.
    Ezeket ki kell nyerjem, így egy kérés már 5mp.

    Így néz ki a lekérés:
    SELECT SQL_CALC_FOUND_ROWS
    `apro_ads`.id AS ad_id,
    `apro_ads`.*,
    `apro_users`.*,
    `apro_cat_level1`.*,
    `apro_cat_level2`.*,
    `apro_cat_level2`.*,
    `apro_ad_favorites`.advert_id AS is_favorite,
    `apro_ad_favorites`.user_id AS favorite_user_id,
    transactions.id AS trans_id,transactions.upgrade_type,transactions.auto_top,transactions.upgrade_duration,transactions.payment_status,transactions.payed_time,transactions.ad_showed

    ,customs_maganszemely.element_value,customs_kinal_keres_kiadna_berelne.element_value,customs_szobak_szama.element_value,customs_meret.element_value,customs_allapot.element_value,customs_futes.element_value,customs_emelet.element_value,customs_lift.element_value,customs_ingatlan_tipusa.element_value,customs_kilatas.element_value,customs_erkely.element_value,customs_butorozott.element_value,customs_parkolas.element_value,customs_energiatanusitvany.element_value
    FROM apro_ads
    JOIN `apro_users` ON apro_ads.owner_id = `apro_users`.id
    LEFT JOIN `apro_cat_level1` ON apro_ads.cat_level1 = `apro_cat_level1`.id
    LEFT JOIN `apro_cat_level2` ON apro_ads.cat_level2 = `apro_cat_level2`.id
    LEFT JOIN `apro_cat_level3` ON apro_ads.cat_level3 = `apro_cat_level3`.id
    LEFT JOIN `apro_ad_favorites` ON apro_ads.id = `apro_ad_favorites`.advert_id
    LEFT JOIN (SELECT ad_id AS max_ad_id,MAX( id ) AS max_trans_id FROM `apro_transactions` GROUP BY max_ad_id) AS max_trans_id ON max_trans_id.max_ad_id = apro_ads.id
    LEFT JOIN `apro_transactions` AS transactions ON (transactions.id = max_trans_id.max_trans_id)

    LEFT JOIN ( SELECT element_value, item_id FROM `apro_category_customs` WHERE element_name = 'customs_maganszemely') AS customs_maganszemely ON `apro_ads`.id = customs_maganszemely.item_id
    LEFT JOIN ( SELECT element_value, item_id FROM `apro_category_customs` WHERE element_name = 'customs_kinal_keres_kiadna_berelne') AS customs_kinal_keres_kiadna_berelne ON `apro_ads`.id = customs_kinal_keres_kiadna_berelne.item_id
    LEFT JOIN ( SELECT element_value, item_id FROM `apro_category_customs` WHERE element_name = 'customs_szobak_szama') AS customs_szobak_szama ON `apro_ads`.id = customs_szobak_szama.item_id
    LEFT JOIN ( SELECT element_value, item_id FROM `apro_category_customs` WHERE element_name = 'customs_meret') AS customs_meret ON `apro_ads`.id = customs_meret.item_id
    LEFT JOIN ( SELECT element_value, item_id FROM `apro_category_customs` WHERE element_name = 'customs_allapot') AS customs_allapot ON `apro_ads`.id = customs_allapot.item_id
    LEFT JOIN ( SELECT element_value, item_id FROM `apro_category_customs` WHERE element_name = 'customs_futes') AS customs_futes ON `apro_ads`.id = customs_futes.item_id
    LEFT JOIN ( SELECT element_value, item_id FROM `apro_category_customs` WHERE element_name = 'customs_emelet') AS customs_emelet ON `apro_ads`.id = customs_emelet.item_id
    LEFT JOIN ( SELECT element_value, item_id FROM `apro_category_customs` WHERE element_name = 'customs_lift') AS customs_lift ON `apro_ads`.id = customs_lift.item_id
    LEFT JOIN ( SELECT element_value, item_id FROM `apro_category_customs` WHERE element_name = 'customs_ingatlan_tipusa') AS customs_ingatlan_tipusa ON `apro_ads`.id = customs_ingatlan_tipusa.item_id
    LEFT JOIN ( SELECT element_value, item_id FROM `apro_category_customs` WHERE element_name = 'customs_kilatas') AS customs_kilatas ON `apro_ads`.id = customs_kilatas.item_id
    LEFT JOIN ( SELECT element_value, item_id FROM `apro_category_customs` WHERE element_name = 'customs_erkely') AS customs_erkely ON `apro_ads`.id = customs_erkely.item_id
    LEFT JOIN ( SELECT element_value, item_id FROM `apro_category_customs` WHERE element_name = 'customs_butorozott') AS customs_butorozott ON `apro_ads`.id = customs_butorozott.item_id
    LEFT JOIN ( SELECT element_value, item_id FROM `apro_category_customs` WHERE element_name = 'customs_parkolas') AS customs_parkolas ON `apro_ads`.id = customs_parkolas.item_id
    LEFT JOIN ( SELECT element_value, item_id FROM `apro_category_customs` WHERE element_name = 'customs_energiatanusitvany') AS customs_energiatanusitvany ON `apro_ads`.id = customs_energiatanusitvany.item_id
    WHERE `apro_ads`.`cat_level1` = 2 AND `apro_ads`.`cat_level2` = 6 AND a_town ='Budapest' AND `customs_maganszemely`.`element_value` = '1' AND `customs_kinal_keres_kiadna_berelne`.`element_value` = '1' AND a_status='A'
    AND transactions.payment_status = 'payed'
    AND DATE_ADD(transactions.`payed_time`,INTERVAL transactions.`upgrade_duration` DAY) >= NOW()
    AND a_status='A'
    AND `apro_users`.status = 'A'
    GROUP BY ad_id
    ORDER BY transactions.ad_showed ASC

    Csatoltam egy explain kimenetet, hogy lássátok mi van indexelve.
    [link]

    [ Szerkesztve ]

    PH Konfigom: Gigabyte GA-H97M-D3H, i7 4790K,GTX 960, Seasonic SS-620GM

Új hozzászólás Aktív témák