Tema: Re: MySQL uzklausa
Autorius: Jornada Del Muerto
Data: 2011-08-09 15:20:01
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 :) 
> 
>