Autor | Zpráva | ||
---|---|---|---|
Radicz Profil * |
#1 · Zasláno: 17. 9. 2010, 17:22:14
Zdravim všechny a prosím o pomoc. Mam dotaz kterým sosam data z více tabulek naráz. Mám tabulku bodů, každý z nich má své ID. Podle tohoto ID najdu všechny řádky v tabulce mapa_zarazeni_ip, které náleží danému bodu. Tabulka mapa_zarazeni_ip pouze spojuje tabulku bodu a tabulku IP adres. Díky tomuto dokážu vysosat třeba 5 IP adres které náleží danému bodu. Jde ale teď o to že mam ještě jednu tabulku mapa_ip_stav, kde jednotlivé ip adresy z tabulky mají svůj stav který je buďto jedna nebo nula. Dotaz je umí vysosat i tyto stavy, ALE bohužel díky distinct vynechá všechny schodné tudíž mi vždy vypíše maximálně jednu jedničku a jednu nulu. ale já potřebuju aby vypsal tolik stavů kolik mam IP adres k jednotlivému bodu. Po odstranění distinct vlivem četných průchodů mam zas řadu čísel, který nedávaj smysl. Děkuji za jakoukoliv odpověd.
¨ $pokus = mysql_query (" SELECT mapa_bod.nazev AS nazev, mapa_bod.adresa AS adresa, mapa_bod.gps_x AS gps_x, mapa_bod.gps_y AS gps_y, mapa_bod.vsesmer AS vsesmer, mapa_pasmo.pasmo AS pasmo, mapa_polarizace.polarizace AS polarizace, mapa_sifrovani.sifrovani AS sifrovani, mapa_foto.slozka AS slozka, GROUP_CONCAT(distinct mapa_ip.ssid) AS ssid, GROUP_CONCAT(distinct mapa_ip.ip) AS ip, GROUP_CONCAT(distinct mapa_ip.smer) AS smer, GROUP_CONCAT(distinct mapa_ip_stav.stav) AS stav, GROUP_CONCAT(distinct mapa_foto.link) AS foto FROM mapa_bod LEFT JOIN mapa_pasmo ON mapa_bod.pasmo = mapa_pasmo.id_pasmo LEFT JOIN mapa_polarizace ON mapa_bod.polarizace = mapa_polarizace.id_polarizace LEFT JOIN mapa_sifrovani ON mapa_bod.sifrovani = mapa_sifrovani.id_sifrovani LEFT JOIN mapa_zarazeni_ip ON mapa_bod.id_bod = mapa_zarazeni_ip.id_bod LEFT JOIN mapa_ip ON mapa_zarazeni_ip.prirazeni = mapa_ip.id_ip LEFT JOIN mapa_ip_stav ON mapa_zarazeni_ip.prirazeni = mapa_ip_stav.id_ip LEFT JOIN mapa_zarazeni_foto ON mapa_bod.id_bod = mapa_zarazeni_foto.id_bod LEFT JOIN mapa_foto ON mapa_zarazeni_foto.prirazeni = mapa_foto.id_foto WHERE mapa_bod.zobraz = 1 GROUP BY mapa_bod.id "); while($pole = mysql_fetch_assoc($pokus)) { print_r($pole); } Výpis s distinct (všimněte si položky stav vybraná jsou 3 IP ale pouze dva stavy): Array ( [nazev] => Na Kohoutě 12 [adresa] => Na Kohoutě 12, Ústí nad Labem [gps_x] => 50.686816584573770 [gps_y] => 14.000144004821777 [vsesmer] => 1300 [pasmo] => 5 GHz [polarizace] => horizontální [sifrovani] => WPA2+PSK type CCMP(AES) [slozka] => kohout_12/ [ssid] => pokus,vseborice.net_ksk-5G,vseborice.net_1-5G [ip] => 172.16.2.255,172.16.45.1,172.16.34.1 [smer] => Ústí Nad Labem,Skorotice,vsesmer [stav] => 1,0 [foto] => 06.jpg,04.jpg,02.jpg,07.jpg,05.jpg,03.jpg,01.jpg ) Výpis bez distinct (vybrány jsou 3 IP adresy ale hromada nepoužitelných stavů) Array ( [nazev] => Na Kohoutě 12 [adresa] => Na Kohoutě 12, Ústí nad Labem [gps_x] => 50.686816584573770 [gps_y] => 14.000144004821777 [vsesmer] => 1300 [pasmo] => 5 GHz [polarizace] => horizontální [sifrovani] => WPA2+PSK type CCMP(AES) [slozka] => kohout_12/ [ssid] => pokus,vseborice.net_1-5G,vseborice.net_ksk-5G [ip] => 172.16.2.255,172.16.34.1,172.16.45.1 [smer] => Ústí Nad Labem,vsesmer,Skorotice [stav] => 1,1,1,0,1,1,0,0,1,1,0,0,1,1,0,1,1,1,1,0,1 [foto] => 02.jpg,07.jpg,05.jpg,03.jpg,01.jpg,06.jpg,04.jpg ) |
||
Radicz Profil * |
#2 · Zasláno: 18. 9. 2010, 12:21:25
Nikdo nic? To snad ne, to je snad poprvé co jsem nedostal odpověd :(
|
||
Kajman_ Profil * |
#3 · Zasláno: 20. 9. 2010, 12:09:14
A jakém formátu vlastně chcete ty stavy dostat?
|
||
Radicz Profil * |
#4 · Zasláno: 20. 9. 2010, 17:56:15
V řadě za sebou odděléné čárkou, stejně tak jako je ip s tim že první stav odpovídá prvnímu ip druhý stav odpovídá druhýmu ip atd. Trošku sem nad tim uvažoval a nevim jestli je to klíčové, ale očividně to mrší ten výběr fotek, protože řadá stavů je pak vynásobená tim počten fotek. Ted by se měli zobrazit 3 stavy, ale je jich 21, protože je vybráno 7 fotek. Když odeberu výběr fotek, vše funguje jak má.
|
||
PostCC Profil |
#5 · Zasláno: 20. 9. 2010, 18:14:25
Radicz:
Nemělo by tam být ještě určeno v jakém pořadí mají ty stavy následovat a explicitně i oddělovač? Tedy něco jako: ... GROUP_CONCAT(DISTINCT mapa_ip.smer) AS smer, GROUP_CONCAT(DISTINCT mapa_ip_stav.stav ORDER BY mapa_ip_stav.Id SEPARATOR ',') AS stav, GROUP_CONCAT(DISTINCT mapa_foto.link) AS foto Tak bych to tedy zkusil. Jinak není zaručeno v jakém pořadí si MySQL výsledky sgrupuje. Koneckonců je dobrým zvykem uvádět tyto dvě direktivy v každém použití funkce GROUP_CONCAT. |
||
Radicz Profil * |
#6 · Zasláno: 20. 9. 2010, 19:38:25
PostCC:
Děkuji za poučení, bohužel problém se tim nevyřešil. |
||
Kajman_ Profil * |
#7 · Zasláno: 20. 9. 2010, 21:20:59
Možná si zkuste zgroupovat ip a fotky zvlášť, takhle to jejich spojení každného s každým nedává zrovna smysl. Snad něco jako
select tmp.*, mapa_foto.slozka AS slozka, GROUP_CONCAT(mapa_foto.link) AS foto from (SELECT mapa_bod.nazev AS nazev, mapa_bod.adresa AS adresa, mapa_bod.gps_x AS gps_x, mapa_bod.gps_y AS gps_y, mapa_bod.vsesmer AS vsesmer, mapa_pasmo.pasmo AS pasmo, mapa_polarizace.polarizace AS polarizace, mapa_sifrovani.sifrovani AS sifrovani, GROUP_CONCAT(mapa_ip.ssid ORDER BY mapa_ip.id_ip) AS ssid, GROUP_CONCAT(mapa_ip.ip ORDER BY mapa_ip.id_ip) AS ip, GROUP_CONCAT(mapa_ip.smer ORDER BY mapa_ip.id_ip) AS smer, GROUP_CONCAT(mapa_ip_stav.stav ORDER BY mapa_ip.id_ip) AS stav, mapa_bod.id_bod FROM mapa_bod LEFT JOIN mapa_pasmo ON mapa_bod.pasmo = mapa_pasmo.id_pasmo LEFT JOIN mapa_polarizace ON mapa_bod.polarizace = mapa_polarizace.id_polarizace LEFT JOIN mapa_sifrovani ON mapa_bod.sifrovani = mapa_sifrovani.id_sifrovani LEFT JOIN mapa_zarazeni_ip ON mapa_bod.id_bod = mapa_zarazeni_ip.id_bod LEFT JOIN mapa_ip ON mapa_zarazeni_ip.prirazeni = mapa_ip.id_ip LEFT JOIN mapa_ip_stav ON mapa_zarazeni_ip.prirazeni = mapa_ip_stav.id_ip WHERE mapa_bod.zobraz = 1 GROUP BY mapa_bod.id_bod) tmp LEFT JOIN mapa_zarazeni_foto ON tmp.id_bod = mapa_zarazeni_foto.id_bod LEFT JOIN mapa_foto ON mapa_zarazeni_foto.prirazeni = mapa_foto.id_foto group by tmp.id_bod, mapa_foto.slozka |
||
Radicz Profil * |
#8 · Zasláno: 21. 9. 2010, 23:30:23
Kajman, PostCC
Mockrát děkuji |
||
Časová prodleva: 14 let
|
0