ray Posted April 18, 2012 Report Share Posted April 18, 2012 (edited) Varbūt kāds db speciālists var palīdzēt opimizēt / izveidot šādu vaicājumu: SELECT*, id n_id, ( SELECT file FROM _pictures p WHERE p.parent_id = n_id ORDER BY p.id ASC LIMIT 1 ) first , ( SELECT file FROM _pictures p WHERE p.parent_id = n_id AND p.id = picture_id ORDER BY p.id ASC LIMIT 1 ) picture FROM _news WHERE active = 1 ORDER BY id DESC tabulas: [_news] - id - title - text - picture_id - active [_pictures] -id - file - parent_id Tas rezultāts, kas jāpanāk ir jāatlasa no bilžu tabulas izvēlētē jaunuma default bilde (picture_id) vai pirmā pēc secības, ja tajā tabulā tāda bilde nav vai picture_id = 0 Vaicājumi vienmēr bijusi man liela problēma, tāpēc varbūt kāda "gudrāka galva" var šajā lietā izlīdzēt Edited April 18, 2012 by ray Quote Link to comment Share on other sites More sharing options...
Kavacky Posted April 18, 2012 Report Share Posted April 18, 2012 Nenodarbojies ar muļķībām, bet nodrošini, ka `news` tabulā vienmēr ir pareizs `picture_id`, bet tas ir 0 vai kā citādi tukšs tikai tad, kad rakstam nevienas bildes nav. Tas būs krietni labāk par kaut kādu sviestainu kveriju. Quote Link to comment Share on other sites More sharing options...
marrtins Posted April 18, 2012 Report Share Posted April 18, 2012 Hmm, kāpēc p.id = 1 abos subselektos? Kas ir p.parent_id? Quote Link to comment Share on other sites More sharing options...
ray Posted April 18, 2012 Author Report Share Posted April 18, 2012 (edited) Atvainojos, kļūda query. p.id = 1 nebija jābūt. parent_id ir "_pictures" tabulā un norāda pie kuras ziņas bilde pieder. Izlaboju pirmajā ierakstā "_pictures" tabulu un query Kavacky: diemžēl tā nevar izdarīt, jo lietotājam ir arī iespēja nenorādīt titulbildi (picture_id), tādā gadījumā jārādās pirmā bilde no galerijas (_pictures tabula) Edited April 18, 2012 by ray Quote Link to comment Share on other sites More sharing options...
Aleksejs Posted April 18, 2012 Report Share Posted April 18, 2012 Un kam ir jāatlasās , ja attiecīgajam news_id nav nevienas bildes ar atbilstošu parent_id? Quote Link to comment Share on other sites More sharing options...
marrtins Posted April 18, 2012 Report Share Posted April 18, 2012 Tad ko tur daudz optimizēt? Tev bremzē? Indexi ir salikti? Parādi EXPLAIN tam kverijam. Quote Link to comment Share on other sites More sharing options...
ray Posted April 18, 2012 Author Report Share Posted April 18, 2012 Nebremzē, man vienkārši ir tāda sajūta, ka šis query nav tas labākais risinājums šādai vajadzībai. Quote Link to comment Share on other sites More sharing options...
marrtins Posted April 18, 2012 Report Share Posted April 18, 2012 Nu to vienu subselektu var pārrakstīt par JOINu, ja visi primary key ir kārtībā. SELECT *, id n_id, ( SELECT file FROM _pictures p WHERE p.parent_id = n_id ORDER BY p.id ASC LIMIT 1 ) first, p.file AS picture FROM _news LEFT JOIN _pictures p ON p.id = picture_id WHERE active = 1 ORDER BY id DESC Quote Link to comment Share on other sites More sharing options...
daGrevis Posted April 18, 2012 Report Share Posted April 18, 2012 +1 par kverija formatēšanu. Uzreiz paliku priecīgāks lasot to! Quote Link to comment Share on other sites More sharing options...
Kavacky Posted April 18, 2012 Report Share Posted April 18, 2012 Kavacky: diemžēl tā nevar izdarīt, jo lietotājam ir arī iespēja nenorādīt titulbildi (picture_id), tādā gadījumā jārādās pirmā bilde no galerijas (_pictures tabula) Un kas īsti traucē, ja lietotājs ir norādījis nevienu bildi, tad atrast pirmo bildi galerijā un apdeitot `news`? Un, kad bildes pamaina, apdeitot atkal? Pie galerijas bildēm tad jānorāda, ka tas ir usera manuāli selektēts thumbnailis, lai nepārrakstītu kaut ko nepareizi, ja pamaina kādas bildes, bet ir jau manuāli uzstādītais thumbnailis. 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.