Tema: Re: MySQL uzklausa
Autorius: taikaika
Data: 2011-08-09 16:40:45
va as panasia minti turejau is pradziu, tik norejau apsieiti be papildomos 
celes lentoj, o viska padaryti on the fly, taciau ten kazkas nesigavo, tai 
nusprendziau ieskoti atsakymo toliau, nes norejosi tiketi, kad yra 
paprastesnis budas:)

kreipiausi i kita forumjuka, tai atsakymas atrodo taip paprastai, kad net 
juokas sujame :D bet, kaip sako, tobula tai, kas paprasta :D

kam idomu:

SELECT i2.order_id
FROM order_items i1
    RIGHT OUTER JOIN order_items i2
        ON i2.item_id = i1.item_id
        AND i2.quantity = i1.quantity
        AND i1.order_id = X
WHERE i2.order_id  != X
GROUP BY i2.order_id
HAVING COUNT(i1.order_id) = COUNT(*)
   AND COUNT(i1.order_id) = (SELECT COUNT(*) FROM order_items WHERE order_id 
= X)



"Jornada Del Muerto" <Jornada@Lythum.lt> wrote in message 
news:j1r8lh$o9l$1@trimpas.omnitel.net...
> Sveiks,
>
>    Siaip senai su MySQL dirbes, daugiau su MSSQL, tai net idomu kaip 
> atsakys kazkas i si klausima, nes uzduotis sudetinga :) neaisku ar cia 
> galutinis poreikis, nes gal eitu kazkaip kitaip tai padaryti.
>
> Jeigu man butu toks poreikis traukineti tokias analogijas, eiciau 
> lengviausiu keliu, t.y. sukuriant papildoma lauka orders lentoje, arba jei 
> to retai reikia sukurti nauja lenta su:
>
> TblOrdersInfo
> ---
> id,
> order_id,
> order_hash varchar(1024)    <- jei irasu daug tai nekenktu ji ir indeksuot
>
> Zodziu esme naujame lauke: order_hash varchar(1024)  si hash lauka tektu 
> pildyti sukurus uzsakyma su prekemis arba redaguojant si uzsakyma - 
> pakeiciant jam priklausancias prekes, tai galetu buti kazkokia funkcija 
> tiesiog. Esme tame lauke rasai taip:
>
> [prekesId]:[kiekis].[prekesId]:[kiekis].[prekesId]:[kiekis].[prekesId]:[kiekis].ir 
> t.t...
>
> Labai svarbu kad prekiuID butu surusiuoti formuojant sia eilute, pvz 
> visada nuo maziausio iki didziausio. tada gautum unikalia kiekvienam 
> uzsakymui eilute su ju prekiu id ir kiekiais, pvz.:
>
> 112:10.1355:5.55:5. ir t.t... aka: 
> Preke_A_id:preke_A_kiekis.preke_B_id:prekeBKiekis.
>
> Turint tokia informacija laisvai issitrauktum ka nori ar visus tokius pat 
> uzsakymus su tokiu pat komplektu prekiu nes tikslus prekiu komplektas butu 
> surasytas vienoje eiluteje:
>
> SELECT *
> FROM
>    orders
> WHERE
>        order_hash = atitinkamo order naujo lauko reiksme
> And  id != orderio kurio nereik id
>
> Jei tai viena uzklausa istraukt reik tai tada butu pvz.:
>
> SELECT *
> FROM
>    orders o
> WHERE
>        order_hash in (Select order_hash from orders where id = 
> !orderio_id!)
> And id != !orderio_id!
>
> Tiesa pavyzdzius rasiau MSSQL sintakse, bet kazkas panasaus turetu buti 
> MySQL
>
> O uzsakymams tada tektu sukurt kazkokia funkcija, nezinau kuo ten 
> programuoji, php ar kuo kitu ar tiesiog procedura kuri istraukia kiekvieno 
> uzsakymo visas prekes surusiavus prekiu_id ASC ir craftina is ju 
> atitinkamo formato string'a ir ji iraso prie uzsakymu ar papildomos 
> lentos, ziurint kaip darysi. tada i funkcijas kurie kuria ar keicia 
> uzsakymus tektu ideti sios funkcijos kvietima.
>
> Manau kitu atveju uzsiknisi, o toks dalykas tai palengvintu, jei to reikia 
> retai tai geriau det atskiroje lentoje.
>
> JDM.
>
>
>
>
> "taikaika" <aaaaaa@bbbb.lt> wrote in message 
> news:j1p0gg$8av$1@trimpas.omnitel.net...
>> labas,
>>
>> turiu 2 lenteles:
>> 1. orders (id)
>> 2. order_items (id, order_id, item_id(prekes id is kitos lentos), 
>> quantity)
>>
>> tarkim turiu uzsakyma X, kuris turi prekes A -1 vnt, B - 2 vnt, C - 1 vnt
>>
>> man reiketu surasti is visos orders lentos tuos uzsakymus, kurie turi tas
>> pacias prekes ir toki pati ju skaiciu, aisku, praleidziant uzsakyma X.
>>
>> patarkit, prasau, kaip iveikt sia uzduoti :)
>>
>>