Autorius Tema: Array rušiavimas  (Skaityta 778 kartus)

Neprisijungęs Modestas Vaitkevičius

  • Dalyvis
  • **
  • Įrašai: 2005
  • Karma: +56/-16
    • Žiūrėti profilį
    • Apie mane
Array rušiavimas
« Įrašytas: 2012-09-03 17:33:29 pm »
Sveiki, reiktų pagalbos:
Turiu dvi lenteles, kurios turi tam tikrus duomenis, tačiau jie yra panašūs, bet:
Viena lentelė yra su orders, kita delivery. Reikia iš abiejų lentelių ištraukti duomenis ir juos atspausdinti vienoje atsižvelgiant į laiką.
turėtų gautis taip:
Citata
order
delivery
delivery
order
order
delivery
order
Galvoju apie array_merge() bei apie sort(), bet kaip sort() funkcijai nurodyti, kad noriu filtruoti būtent pagal date?

ps. Abiejų lentelių data yra timestamp, bei užvadinta date :)


Ačiū už pagalbą

Prisijungęs Lukas Liesis

  • Administratorius
  • Herojus
  • ******
  • Įrašai: 7385
  • Karma: +226/-15
    • Žiūrėti profilį
    • mano CV
Ats: Array rušiavimas
« Atsakymas #1 Įrašytas: 2012-09-03 17:44:00 pm »
neprisimenu kuri tiksliai, bet kazkuri is situ tau reikalinga:

http://php.net/manual/en/array.sorting.php

p.s. kazkodel visu pirma norejau siulyt sita http://php.net/manual/en/function.asort.php bet geriau pasiziurek toj lentelej :)
Jūsų draugas, kolega ir puslapio administratorius,

Lukas.

Manualai.lt Facebooke
serveriai.lt 50% nuolaida!
Free Hosting
Free Templates

Neprisijungęs Modestas Vaitkevičius

  • Dalyvis
  • **
  • Įrašai: 2005
  • Karma: +56/-16
    • Žiūrėti profilį
    • Apie mane
Ats: Array rušiavimas
« Atsakymas #2 Įrašytas: 2012-09-03 17:50:45 pm »
Kažkaip nesigavo su visom tom funkcijom, nes man net ir sujungus ( merge ) išsikraipo duomenys visiškai....

Prisijungęs Lukas Liesis

  • Administratorius
  • Herojus
  • ******
  • Įrašai: 7385
  • Karma: +226/-15
    • Žiūrėti profilį
    • mano CV
Ats: Array rušiavimas
« Atsakymas #3 Įrašytas: 2012-09-03 18:04:49 pm »
Kažkaip nesigavo su visom tom funkcijom, nes man net ir sujungus ( merge ) išsikraipo duomenys visiškai....


tai tau reikia ne paprasto merge o gal merginti islaikant indeksus ar pns, nezinau ka tu ten turi.

gal tau kazko tokio reikia kaip http://php.net/manual/en/function.array-multisort.php
Jūsų draugas, kolega ir puslapio administratorius,

Lukas.

Manualai.lt Facebooke
serveriai.lt 50% nuolaida!
Free Hosting
Free Templates

Manualai.lt Forumas

Ats: Array rušiavimas
« Atsakymas #3 Įrašytas: 2012-09-03 18:04:49 pm »

Neprisijungęs Modestas Vaitkevičius

  • Dalyvis
  • **
  • Įrašai: 2005
  • Karma: +56/-16
    • Žiūrėti profilį
    • Apie mane
Ats: Array rušiavimas
« Atsakymas #4 Įrašytas: 2012-09-03 18:06:58 pm »
Heh, štai kodas, kurį reikia perdaryti į mano pvz:
<table>
<tr>
<td><h2>Orders</h2></td>
<td><h2>Delivery</h2></td>
</tr>
<tr>
<td>
<table>
<tr>
<td>Date</td><td>Quanity</td>
</tr>
';
$q1 = DB::queryRaw("SELECT * FROM orders_items WHERE product_id = %s ORDER BY date LIMIT 30",$_GET['id']);
while($d1 = $q1->fetch_assoc())
{
echo '<tr><td>'.date("d/m/Y H:i",$d1['date']).'</td> <td> '.$d1['quanity'].'</td></tr>';
}
echo '
</table>
</td>

<td>
<table>
<tr>
<td>Date</td><td>Quanity</td>
</tr>
';
$q2 = DB::queryRaw("SELECT * FROM orders_delivery WHERE product_id = %s ORDER BY date LIMIT 30",$_GET['id']);
while($d2 = $q2->fetch_assoc())
{
echo '<tr><td>'.date("d/m/Y H:i",$d2['date']).'</td> <td> '.$d2['quanity'].'</td></tr>';
}
echo '
</table>
</td>
</tr>
</table>

Prisijungęs Lukas Liesis

  • Administratorius
  • Herojus
  • ******
  • Įrašai: 7385
  • Karma: +226/-15
    • Žiūrėti profilį
    • mano CV
Ats: Array rušiavimas
« Atsakymas #5 Įrašytas: 2012-09-03 19:18:59 pm »
tai tu joinsa padaryk tarp tu queriu ir orderi uzdes gal ant abeju uzklausu rezultatu sql'as, nereiks tau su php vargt :)

http://www.w3schools.com/sql/sql_join.asp
Jūsų draugas, kolega ir puslapio administratorius,

Lukas.

Manualai.lt Facebooke
serveriai.lt 50% nuolaida!
Free Hosting
Free Templates

Neprisijungęs Modestas Vaitkevičius

  • Dalyvis
  • **
  • Įrašai: 2005
  • Karma: +56/-16
    • Žiūrėti profilį
    • Apie mane
Ats: Array rušiavimas
« Atsakymas #6 Įrašytas: 2012-09-03 19:31:04 pm »
Gal ir negražiai atrodys, bet gali gali padėti sujungti šias užklausas? :D
$q1 = DB::queryRaw("SELECT * FROM orders_items WHERE product_id = %s ORDER BY date LIMIT 30",$_GET['id']);
$q2 = DB::queryRaw("SELECT * FROM orders_delivery WHERE product_id = %s ORDER BY date LIMIT 30",$_GET['id']);
Visiškai to nemoku...

Prisijungęs Lukas Liesis

  • Administratorius
  • Herojus
  • ******
  • Įrašai: 7385
  • Karma: +226/-15
    • Žiūrėti profilį
    • mano CV
Ats: Array rušiavimas
« Atsakymas #7 Įrašytas: 2012-09-03 19:32:56 pm »
Gal ir negražiai atrodys, bet gali gali padėti sujungti šias užklausas? :D
$q1 = DB::queryRaw("SELECT * FROM orders_items WHERE product_id = %s ORDER BY date LIMIT 30",$_GET['id']);
$q2 = DB::queryRaw("SELECT * FROM orders_delivery WHERE product_id = %s ORDER BY date LIMIT 30",$_GET['id']);
Visiškai to nemoku...


todėl ir daviau nuorodą, kur detaliai aprašyta :D

http://www.w3schools.com/sql/sql_join.asp

matau naudoji kažkokį php tools'ą užklausoms vykdyt, tai gal jame jau yra joinas ir tereikia tai nurodyti? ;)
Jūsų draugas, kolega ir puslapio administratorius,

Lukas.

Manualai.lt Facebooke
serveriai.lt 50% nuolaida!
Free Hosting
Free Templates

Neprisijungęs Modestas Vaitkevičius

  • Dalyvis
  • **
  • Įrašai: 2005
  • Karma: +56/-16
    • Žiūrėti profilį
    • Apie mane
Ats: Array rušiavimas
« Atsakymas #8 Įrašytas: 2012-09-03 19:49:20 pm »
Kad nėra, bent jau neradau...

Nieko aš ten nepagaunu :D

Neprisijungęs vitalikaz

  • Dalyvis
  • **
  • Įrašai: 895
  • Karma: +59/-2
  • Tikėk kuo tiki
    • Žiūrėti profilį
    • blast.lt
Ats: Array rušiavimas
« Atsakymas #9 Įrašytas: 2012-09-03 22:01:23 pm »
Čia JOIN'as netiks, nes reikia overwrite'int tą patį lauką iš kitos lentelės. Tau šiuo atveju reikia panaudoti UNION. Kažkas tokio:
(SELECT OI.fieldas1 AS a, OI.fieldas2 AS b, OI.fieldas3 AS date FROM orders_items OI WHERE product_id = 10) UNION (SELECT OD.fieldas1 AS a, OD.fieldas2 AS b, OD.fieldas3 AS date FROM orders_delivery OD WHERE product_id = 10) ORDER BY date LIMIT 30Svarbu: selektinamų field'ų skaičius ir eiliškumas (arba pavadinimai, kuriuos nurodai per operatorių AS) turi būtinai sutapti. Bet šiaip manau pas tave nalabai gera duombazės struktūra, nes tokių situacijų tau atsirasti neturėtų. Parašyk smulkiau ką tu darai ir parodyk lentelių sturktūra ir aprašyk logiką daugmaž, gal ką geresnio pasiūlysim. Visokie UNION, INTERSECT ir kiti egzotiškesni SQL statement'ai yra geri dalykai, bet beveik visada (išskyrus labai išimtinius atvejus) naudojami neteisingai ir nevisai pagal paskirtį, kaip, jaučiu, būs ir šiuo tavo atveju.
BlaST
Serveriai.lt paslaugos su 50% nuolaida!
Blast.lt blogas

Neprisijungęs Modestas Vaitkevičius

  • Dalyvis
  • **
  • Įrašai: 2005
  • Karma: +56/-16
    • Žiūrėti profilį
    • Apie mane
Ats: Array rušiavimas
« Atsakymas #10 Įrašytas: 2012-09-03 22:15:19 pm »
Vitalikaz, žinok dabar ir aš jau mastau, kad geriau perdarysiu DB struktūrą ir tiek... Čia galvojau lengvai išsisuksiu nuo viso, o pasirodo čia jau tokia egzotika darosi, kad... lengviau perrašyti kelioliką eilučių nei padaryti šitą sistemą :D

Na ką, dėkui už pagalbą, tikrai šiuo atvėju apsimoka lengviau perrašyti visą sistemą ir tiek :) Todėl taip ir padarysiu :)

Prisijungęs Lukas Liesis

  • Administratorius
  • Herojus
  • ******
  • Įrašai: 7385
  • Karma: +226/-15
    • Žiūrėti profilį
    • mano CV
Ats: Array rušiavimas
« Atsakymas #11 Įrašytas: 2012-09-04 08:10:27 am »
Vitalikaz, žinok dabar ir aš jau mastau, kad geriau perdarysiu DB struktūrą ir tiek... Čia galvojau lengvai išsisuksiu nuo viso, o pasirodo čia jau tokia egzotika darosi, kad... lengviau perrašyti kelioliką eilučių nei padaryti šitą sistemą :D

Na ką, dėkui už pagalbą, tikrai šiuo atvėju apsimoka lengviau perrašyti visą sistemą ir tiek :) Todėl taip ir padarysiu :)


tikrai galetum susirasti kokia gudria funkcija sortinimo ir viskas :) tik zinai, reikia cia bandyt, testuot ir ziuret ar gauni ko nori

http://www.firsttube.com/read/sorting-a-multi-dimensional-array-with-php/
http://stackoverflow.com/questions/2699086/php-sort-multidimensional-array-by-value
http://shiflett.org/blog/2011/jun/sorting-multi-dimensional-arrays-in-php
Jūsų draugas, kolega ir puslapio administratorius,

Lukas.

Manualai.lt Facebooke
serveriai.lt 50% nuolaida!
Free Hosting
Free Templates

Neprisijungęs vitalikaz

  • Dalyvis
  • **
  • Įrašai: 895
  • Karma: +59/-2
  • Tikėk kuo tiki
    • Žiūrėti profilį
    • blast.lt
Ats: Array rušiavimas
« Atsakymas #12 Įrašytas: 2012-09-04 08:32:45 am »
Lukai, nereikia čia workaround'ų. Tokiam atvejui yra skirtas sql'inis UNION (apjungti rezultatus iš skirtingų lentelių) ir tada sortini su paprastu ORDER BY. Problema tame, kad akivaizdžiai duombazės struktūra nelabai gera :)
BlaST
Serveriai.lt paslaugos su 50% nuolaida!
Blast.lt blogas

Prisijungęs Lukas Liesis

  • Administratorius
  • Herojus
  • ******
  • Įrašai: 7385
  • Karma: +226/-15
    • Žiūrėti profilį
    • mano CV
Ats: Array rušiavimas
« Atsakymas #13 Įrašytas: 2012-09-04 08:44:40 am »
Lukai, nereikia čia workaround'ų. Tokiam atvejui yra skirtas sql'inis UNION (apjungti rezultatus iš skirtingų lentelių) ir tada sortini su paprastu ORDER BY. Problema tame, kad akivaizdžiai duombazės struktūra nelabai gera :)

Tai as jam ir siuliau jointa koki padaryti tarp tu queriu, bet is esmes galima tiek su sql ispresti ta beda, tiek su php, tai man rodos yra tiesiog zinoti abu variantus ir kuris pasirodo paprastesnis ta ir naudoti, aisku reiktu atkreipti demesi dar i overall performance :)
Jūsų draugas, kolega ir puslapio administratorius,

Lukas.

Manualai.lt Facebooke
serveriai.lt 50% nuolaida!
Free Hosting
Free Templates

Neprisijungęs vitalikaz

  • Dalyvis
  • **
  • Įrašai: 895
  • Karma: +59/-2
  • Tikėk kuo tiki
    • Žiūrėti profilį
    • blast.lt
Ats: Array rušiavimas
« Atsakymas #14 Įrašytas: 2012-09-04 09:10:32 am »
Tai as jam ir siuliau jointa koki padaryti tarp tu queriu, bet is esmes galima tiek su sql ispresti ta beda, tiek su php, tai man rodos yra tiesiog zinoti abu variantus ir kuris pasirodo paprastesnis ta ir naudoti, aisku reiktu atkreipti demesi dar i overall performance :)
Joint'ą daro prieš rūkant kasiaką, o union sujungia užklausų rezultatus į aukštį. O join apjungia lenteles į plotį. Na čia jau tikrai geriau išorder'int SQL lygyje, negu naudoti merge/buble/ar kitus PHP naudojamus sort algoritmus, perbėgant jau sukonstruotą rezultatą iš naujo :)
BlaST
Serveriai.lt paslaugos su 50% nuolaida!
Blast.lt blogas

Prisijungęs Lukas Liesis

  • Administratorius
  • Herojus
  • ******
  • Įrašai: 7385
  • Karma: +226/-15
    • Žiūrėti profilį
    • mano CV
Ats: Array rušiavimas
« Atsakymas #15 Įrašytas: 2012-09-04 09:13:00 am »
Tai as jam ir siuliau jointa koki padaryti tarp tu queriu, bet is esmes galima tiek su sql ispresti ta beda, tiek su php, tai man rodos yra tiesiog zinoti abu variantus ir kuris pasirodo paprastesnis ta ir naudoti, aisku reiktu atkreipti demesi dar i overall performance :)
Joint'ą daro prieš rūkant kasiaką, o union sujungia užklausų rezultatus į aukštį. O join apjungia lenteles į plotį. Na čia jau tikrai geriau išorder'int SQL lygyje, negu naudoti merge/buble/ar kitus PHP naudojamus sort algoritmus, perbėgant jau sukonstruotą rezultatą iš naujo :)

ok ok, pasistengsiu terminologija atsargiau pasirinkti :D Vistiek man patinka tuos sql jungimus visus (left/right/union) vadint jointais ; ) nors ir nerukau ir nesuku kasiaku ;p
Jūsų draugas, kolega ir puslapio administratorius,

Lukas.

Manualai.lt Facebooke
serveriai.lt 50% nuolaida!
Free Hosting
Free Templates

Manualai.lt Forumas

Ats: Array rušiavimas
« Atsakymas #15 Įrašytas: 2012-09-04 09:13:00 am »