Többlépcsős MYSQL lekérdezés probléma

Keresés
Hírlevél
 
ASPC#C++CSSDelphiFlashJavaJavaScriptPascalPerlPHPPythonuniPaaSVisual BasicVisual C++  »    
nyitotta: suni-ikoza, idő: 2012.06.30., moderátor: Árnyék, megoldás elfogadva: 2012.07.21. 11:55
  Értesítés változás esetén Felvétel kedvencekhez Küldés emailben

Kategóriák:Adatbázisok » MySQL

Sorrend:
Időzóna:
Blokkméret:
Oszd meg!
Sziasztok!

Az alabbi tobbszori MYSQL meghivast hogyan lehetne csokkenteni, a MYSQL szerver terhelesenek és a MYSQL lekerdezes egylepcsosegenek erdekeben.

Most elso korben lekerdezem a kategoriakat aztan pedig a hozzatartozo egyeb tartalmakat. Ez ebben az esetben nem biztos, hogy nem jo megoldas, mert igy most olyan 5-10 lekerdezes van.
De ebbe a dologba tobbszor belefutottam mar es van ahol ezek a lekerdezesek tobb 100 es az mar nem biztos, hogy hatekony ilyen megoldassal.

Kulon teszem be a kodokat, mert osszkutyulta az egeszet a forum, egymasba agyazta amit beraktam. Leirni is nehez hogy nez ki
Kulon hozzaszolasnal remelem jo lesz.
JOIN -nal összekötöd a két táblát kapsz egy lekérdezést, ami
az első táblád annyi sorba rakja ahány hozzá kapcsolt elem van a másik táblában.

majd összeállíthatsz egy tömböt, amit így indekszelsz:
while($sor=.....................)
{
$tomb[$id]["tabla1"] = array( $sor["tabla1_id"],$sor["tabla2_mezo1"],$sor["tabla2_mezo2"] );
$tomb[$id]["tabla2"][] = array( $sor["tabla2_id"],$sor["tabla2_egyebmezo"] );
}
majd a tömb bejárásával ha szükséges a tabla2 adatai lehívhatók...

A ciklus a ciklusban és lekérés SQLből kerülendő.
Persze ehhez érdemes a tömbök kezeléséről szóló elméletet felfrissíteni. előzmény

Jelen valtozat MYSQL es ADODB:
$szavazas_kategoriak = $s_db->GetArray("SELECT * FROM ".P."lista_elem WHERE tartozik=".$szavazas['tartozik']);
for ($i=0; $i<count($szavazas_kategoriak); $i++) {
        $szavazas_kategoriak[$i]['valaszok'] = $s_db->GetArray("SELECT * FROM ".P."szavazas_valasz WHERE tartozik=".$szavazas_kategoriak[$i]['id']);
}
print('<pre>');print_r($szavazas_kategoriak);print('</pre>');
előzmény
Kimenete egy sima tobbdimenzios tombben:
Array
(
    [0] => Array
        (
            [id] => 27
            [aktiv] => 1
            [ssz] => 100
            [lista_id] => 10
            [tartozik] => 26
            [nev] => 4x4 hajtású személyautók
            t;
            [leiras] =>
            [valaszok] => Array
                (
                    [0] => Array
                        (
                            [id] => 1
                            [aktiv] => 1
                            [nev] => Audi A4/A6 allroad
                            08-01-01 00:00:00
                            [datum_kezdo] => 2012-06-30 00:57:09
                            [datum_modositott] => 2012-06-30 00:57:21
                            [kulcsszo] =>
                            [leiras] =>
                            [szoveg] =>
                            [szoveg_kicsi] =>
                            [kep1] =>
                        )

                    [1] => Array
                        (
                            [id] => 2
                            [aktiv] => 1
                            [nev] => BMW 550 xd
                                              [szoveg] =>
                            [szoveg_kicsi] =>
                            [kep1] =>
                        )

                    [1] => Array
                        (
                            [id] => 2
                            [aktiv] => 1
                            [nev] => BMW 550 xd
                                              [szoveg] =>
                            [szoveg_kicsi] =>
                            [kep1] =>
                        )

                    [1] => Array
                        (
                            [id] => 2
                            [aktiv] => 1
                            [nev] => BMW 550 xd
                                              [szoveg] =>
                            [szoveg_kicsi] =>
                            [kep1] =>
                        )

                    [1] => Array
                        (
                            [id] => 2
                            [aktiv] => 1
                            [nev] => BMW 550 xd
                             => bmw_550_xd
                            [ssz] => 200
                            [szavazas_id] => 1
                            [tartozik] => 27
                            [datumido] => 2008-01-01 00:00:00
                            [datum_kezdo] => 2012-06-30 00:58:57
                            [datum_modositott] => 2012-06-30 00:58:57
                            [kulcsszo] =>
                            [leiras] =>
                            [szoveg] =>
                            [szoveg_kicsi] =>
                            [kep1] =>
                        )

                )

        )

    [1] => Array
        (
            [id] => 28
            [aktiv] => 1
            [ssz] => 200
            [lista_id] => 10
            [tartozik] => 26
            [nev] => Country kategória, Crossoverek
             => country_kategoria_crossoverek
            [funkc1] =>
            [funkc2] =>
            [funkc3] =>
            [target] => 0
            [kep1] =>
            [kulcsszo] =>
            [leiras] =>
            [valaszok] => Array
                (
                    [0] => Array
                        (
                            [id] => 3
                            [aktiv] => 1
                            [nev] => Audi A3
                             => audi_a3
                            [ssz] => 0
                            [szavazas_id] => 1
                            [tartozik] => 28
                            [datumido] => 2008-01-01 00:00:00
                            [datum_kezdo] => 2012-06-30 00:59:20
                            [datum_modositott] => 2012-06-30 01:56:27
                            [kulcsszo] =>
                            [leiras] =>
                            [szoveg] =>
                            [szoveg_kicsi] =>
                            [kep1] =>
                        )

                    [1] => Array
                        (
                            [id] => 4
                            [aktiv] => 1
                            [nev] => BMW X1
                             => bmw_x1
                            [ssz] => 0
                            [szavazas_id] => 1
                            [tartozik] => 28
                            [datumido] => 2008-01-01 00:00:00
                            [datum_kezdo] => 2012-06-30 00:59:37
                            [datum_modositott] => 2012-06-30 00:59:37
                            [kulcsszo] =>
                            [leiras] =>
                            [szoveg] =>
                            [szoveg_kicsi] =>
                            [kep1] =>
                        )

                )

        )

    [2] => Array
        ( STB.
előzmény
(Igy mar jol jelenik meg.)

A kimenetnek ennek vagy hasonlonak kellene lennie, de lehetoleg esetleg egyszerubb es egy lekerdezessel.

Valaszokat elore is koszonom. előzmény
Ahogy nezem a GROUP_CONCAT bizonyos esetekben akar hasznalhato is, de nem asszociativ tobbdimenzios tombot kapok vissza.

  GROUP_CONCAT(magazin4x4_kapcs_fajl.nev SEPARATOR '*') AS k_nev,
  GROUP_CONCAT(magazin4x4_kapcs_fajl.szoveg SEPARATOR '*') AS k_szoveg

Szoval valami mas megoldas?
Par orat mar szenvedtem vele, utannajarasasal, de sajnos nem talalok megoldast, de megis erzem, hogy lennie kell
( Vagy csak nekem lenne igenyem ilyenre? előzmény
Inkább ismerkedj meg a join fogalmával. Lásd pl. itt előzmény
Koszonom.
A join az a tablak osszekapcsolasanal van szerepe ha jol tudom, vagyis sok helyen hasznalom, 2-3 tabla osszekapcsoalsara is.

De itt tulajdonkeppen, nem csak tobb tabla osszekapcsolasa a lenyeg, hanem egyszerre tobb tabla lekerdezese, de nem osszevonva. Mert a Join osszevon tabla ertekeket egy halmazza.

Lehet meg a megfogalmazas se jo előzmény
Koszonom, vegul is nem teljesen az amire szamitottam, de ezzel igy egy lekerdezessel megoldhato a dolog, csak meg utanna kell dolgozni PHPben. előzmény
Oszd meg!