Több mysql lekérdezés egyesítése

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.

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.

Elnezest a nem erdemi hozzaszolasert, de a "kikapcs" nevu oszlop bearanyozta a napomat :)

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. :/

Nem olvastam vegig kerdest,
Ket valami uniojat akkarod, akkor UNION ?

Amit nem lehet megirni assemblyben, azt nem lehet megirni.

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 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. 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 :)