Sziasztok!
Van két mysql lekérdezésem és egyelőre azt szeretném megoldani, hogy egy lekérdezés legyen a kettőből. Ha fölösleges idézőjel lenne benne az azért van, mert php-ből másoltam.
SELECT DISTINCT betardatum,GROUP_CONCAT(DISTINCT (CASE WHEN (betardatum >= '$startdate 00:00:00' AND betardatum <= '$enddate 00:00:00') THEN betarszam END) SEPARATOR ',') AS betarszam, COUNT(betarszam) AS betarolva FROM goods_in WHERE betardatum>='$startdate 00:00:00' AND betardatum <= '$enddate 00:00:00' AND supplier='$supplier' AND kikapcs = 0 AND aruaz = szuloaz GROUP BY betardatum
SELECT DISTINCT kitardatum,GROUP_CONCAT(DISTINCT (CASE WHEN kitardatum <= '$enddate 00:00:00' AND kitardatum >= '$startdate 00:00:00' THEN szlsz END) SEPARATOR ',') AS szlsz, COUNT(szlsz) AS kitarolva FROM goods_in WHERE kitardatum <= '$enddate 00:00:00' AND kitardatum >= '$startdate 00:00:00' AND supplier='$supplier' AND kikapcs = 0 AND aruaz = szuloaz GROUP BY kitardatum
Ha tömbbe teszem a kimeneteket, akkor a tömbök kimenete így néz ki jelen pillanatban.
Array ( [0] => Array ( [betardatum] => 2016-03-02 00:00:00 [betarszam] => 16-7757,16-7812,16-7813,16-7814,16-7815,16-7816 [betarolva] => 142 ) [1] => Array ( [betardatum] => 2016-03-03 00:00:00 [betarszam] => 16-7817,16-7818,16-7827,16-7828,16-7829,16-7830 [betarolva] => 134 ))
Array ( [0] => Array ( [kitardatum] => 2016-03-01 00:00:00 [szlsz] => K6-15373,K6-15377,K6-15376,K6-15374,K6-15378,K6-15383 [kitarolva] => 119 ) [1] => Array ( [kitardatum] => 2016-03-02 00:00:00 [szlsz] => K6-15405,K6-15406,K6-15401,K6-15409,K6-15407 [kitarolva] => 139 ))
Valami ilyesmi kimenetet szeretnék kapni. Tehát az azonos dátumi kitár és betár részeket fésülje össze.
Array ( [0] => Array ( [kitardatum] => 2016-03-01 00:00:00 [szlsz] => K6-15373,K6-15377,K6-15376,K6-15374,K6-15378,K6-15383 [kitarolva] => 119 ) [1] => Array ( [betardatum] => 2016-03-02 00:00:00 [betarszam] => 16-7757,16-7812,16-7813,16-7814,16-7815,16-7816 [betarolva] => 142 [kitardatum] => 2016-03-02 00:00:00 [szlsz] => K6-15405,K6-15406,K6-15401,K6-15409,K6-15407 [kitarolva] => 139 ) [2] => Array ( [betardatum] => 2016-03-03 00:00:00 [betarszam] => 16-7817,16-7818,16-7827,16-7828,16-7829,16-7830 [betarolva] => 134 ))
Előre is köszönöm a segítségeket.
- 3927 megtekintés
Hozzászólások
Ilyen tömb eredményt nem fogsz kapni, de ezzel talán megközelítheted:
http://pastebin.com/e67Dr19G
Lehet benne pár hiba, de lehet jobban meg lehetne oldani, ha nem így nézne ki a táblaszerkezet.
- A hozzászóláshoz be kell jelentkezni
Köszi. Ezt már próbáltam és valóban nem olyan a kimenete.
Most a két tömb összefésülésével próbálkozom.
- A hozzászóláshoz be kell jelentkezni
Elnezest a nem erdemi hozzaszolasert, de a "kikapcs" nevu oszlop bearanyozta a napomat :)
- A hozzászóláshoz be kell jelentkezni
Miért?
Ha jól értem akkor lekérdezed, hogy egy adott beszállító naponta hány darab kitár és betár műveletet végzett.
Mit szólnál valami hasonló array-hez? :
My_big_array[$supplier] =>
[2016-03-01 00:00:00] => [kitar] => [szlsz] => "K6-15373,K6-15377,K6-15376,K6-15374,K6-15378,K6-15383"
[kitarolva] => "119"
[betar] => ""
[2016-03-02 00:00:00] => [betar] => [betarszam] => "16-7757,16-7812,16-7813,16-7814,16-7815,16-7816"
[betarolva] => "142"
[kitar] => [szlsz] => "K6-15405,K6-15406,K6-15401,K6-15409,K6-15407"
[kitarolva] => "139"
[2016-03-03 00:00:00] => .......
A PHP meg valahogy igy festhozzá :
$result = $this->query($betar_sql_kolbász);
while( $assoc_row = $result->fetch_assoc() ){
$My_big_array[$assoc_row['betardatum']['betar']['betarszam']] = $assoc_row['betarszam'];
$My_big_array[$assoc_row['betardatum']['betar']['betarolva']] = $assoc_row['betarolva'];
}
$result = $this->query($kitar_sql_kolbász);
while( $assoc_row = $result->fetch_assoc() ){
$My_big_array[$assoc_row['kitardatum']['kitar']['szlsz']] = $assoc_row['szlsz'];
$My_big_array[$assoc_row['kitardatum']['kitar']['kitarolva']] = $assoc_row['kitarolva'];
}
Uhhh...ezt most csak úgy összeírtam....lehet hogy a syntax itt ott nem stimmel. :/
- A hozzászóláshoz be kell jelentkezni
Nem olvastam vegig kerdest,
Ket valami uniojat akkarod, akkor UNION ?
Amit nem lehet megirni assemblyben, azt nem lehet megirni.
- A hozzászóláshoz be kell jelentkezni
Próbáltam. Nem jó. A tömb neveit nem jól viszi át. Csak a betár tömb neveit írja bele oda is ahol a kitárnak kellene lennie. Az értékek jók csak a nevek nem.
A másik pedig, hogy a dátumok összefésülése ezzel még mindig nincsen megoldva.
- A hozzászóláshoz be kell jelentkezni
Pedig UNION lesz az. Ugye nem tud mit csinálai: az "első" lekérdezés oszlopneveit fogja kiosztani.
Ha meg akarod különbözetetni, akkor vegyél fel midegyikhez pl. egy új mezőt:
select distinct 'betar' mozgas, betardatum ....
union
select distinct 'kitar' mozgas, kitardatum ....
Üdv,
Feri
- A hozzászóláshoz be kell jelentkezni
A két selectet azonos mezőnevekre kell hozni és egy új mezőben megkülönböztetni a különbőző irányokat! Valahogy így:
SELECT DISTINCT "BE" as irany,betardatum as "Dátum",GROUP_CONCAT(DISTINCT (CASE WHEN (betardatum >= '$startdate 00:00:00' AND betardatum <= '$enddate 00:00:00') THEN betarszam END) SEPARATOR ',') AS szam, COUNT(betarszam) AS tarolva FROM goods_in WHERE betardatum>='$startdate 00:00:00' AND betardatum <= '$enddate 00:00:00' AND supplier='$supplier' AND kikapcs = 0 AND aruaz = szuloaz
union
SELECT DISTINCT "ki" as irany,kitardatum as "Dátum",GROUP_CONCAT(DISTINCT (CASE WHEN kitardatum <= '$enddate 00:00:00' AND kitardatum >= '$startdate 00:00:00' THEN szlsz END) SEPARATOR ',') AS szam, COUNT(szlsz) AS tarolva FROM goods_in WHERE kitardatum <= '$enddate 00:00:00' AND kitardatum >= '$startdate 00:00:00' AND supplier='$supplier' AND kikapcs = 0 AND aruaz = szuloaz
- A hozzászóláshoz be kell jelentkezni
A. verzió
Mi lenne ha csinálnál 2 db view-t. Egyet a be, egyet a ki iránynak, majd lekérdeznéd a két tábla adatait és az irányt statikusan beletárolod a query-be vagy a magába a view-ba?
A probléma azzal amit szeretnél,hogy nem tudsz különböző neveket definiálni a tömbben ugyanarra a pozícióra. (kitartdatum,betardatum)
Ha nem túl nagyok a táblák, akkor ez simán működhet.
B. verzió:
Procedure-t kell írnod és SQL-ben összerakni az egészet, ahogy neked kell. A végeredménye ugyanaz lenne, mint az A verziónak. Ehhez azért kell némi tapasztalat és/vagy guglizás :)
- A hozzászóláshoz be kell jelentkezni
Köszönöm a válaszodat. Elgondolkodok mindkét lehetőségen. Szerintem ki is fogom próbálni őket. Már csak a tapasztalat szerzés miatt is.
- A hozzászóláshoz be kell jelentkezni
Nincs mit. Remélem segít.
- A hozzászóláshoz be kell jelentkezni