Joyride Posted November 19, 2009 Report Share Posted November 19, 2009 Ir tabulas PASŪTĪJUMI un POZĪCIJAS. Vienam pasūtījumam var būt apakšā viena vai vairākas pozīcijas. Dati tiek atlasīti tādā veidā, ka par pamatu tiek ņemta POZĪCIJU tabula un pie tās tiek piesaistīti pasūtījumi: SELECT ... FROM positions LEFT JOIN orders ON positions.order_id = orders.id GROUP BY positions.id, ... LIMIT ??? Un tad PHP pusē atlasītās rindas tiek sagrupētas pa pasūtījumiem. Problēma ir tāda, ka vajag kaut kādā veidā dalīt pa lapām, bet nav iespējams limitēt pēc galvenās tabulas POZĪCIJAS, jo tad ir iespēja, ka pasūtījums tiks "aprauts". Nevaru izdomāt, kā varētu to darīt pēc PASŪTĪJUMU tabulas, teiksim atlasīt pozīcijas, kuras ir pēdējos 5 pasūtījumos. Vai kāds var kaut ko ieteikt? Quote Link to comment Share on other sites More sharing options...
Gints Plivna Posted November 19, 2009 Report Share Posted November 19, 2009 1kārt neredzu nekādu vajadzību pēc LEFT JOIN - vai tiešām pozīcija var būt BEZ pasūtījuma? 2kārt nav īsti skaidrs kādā sakarā ir GROUP BY positions.id, vai tad pastāv iespēja, ka kādu pozīciju var atlasīt vairākas reizes? Un ja jā, tad kāpēc? 3kārt es rakstītu kaut kā tā select * from positions inner join (select * from orders order by ord_id desc limit 5) as ord1 on (pos_ord_id = ord_id) order by ord_id desc, pos_id desc; Tikai vajag palasīties MySQL dokumentācijā, kas notiek ja subselektos raksta LIMIT klauzas, vai MySQLs tās interpretēja korekti, šķiet, ka bija kaut kādi ierobežojumi, it sevišķi arī, ja virsselektā arī bija LIMIT. Gints Plivna http://datubazes.wordpress.com Quote Link to comment Share on other sites More sharing options...
Joyride Posted November 19, 2009 Author Report Share Posted November 19, 2009 1. Īsti nesapratu, ko biji domājis, bet pozīcija nevar būt bez pasūtījuma. 2. Nepastāv iespēja pozīciju atlasīt vairākas reizes, bet pozīcijas tiek vēl sīkāk dalītas pa darba uzdevumiem un iekraušanas uzdevumiem, tātad beigās tas izskatās apmēram šādi: GROUP BY positions.id, aaa.du, bbb.load_task_id Quote Link to comment Share on other sites More sharing options...
Gints Plivna Posted November 19, 2009 Report Share Posted November 19, 2009 Ja pozīcija nevar būt bez pasūtījuma, tad nevajag rakstīt LEFT join, bet labāk INNER join, jo LEFT join nozīmē to, ka labajā pusē ieraksti var arī nebūt tb var būt NULL un tas maldina gan koda uzturētājus, gan potenciāli datubāzi. Skat ko nozīmē inner join un left (outer) join. Quote Link to comment Share on other sites More sharing options...
Joyride Posted November 19, 2009 Author Report Share Posted November 19, 2009 Skaidrs, paldies! Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.