Sasa Posted February 18, 2015 Author Report Share Posted February 18, 2015 Es netiecos pēc īsākā koda, bet pēc optimālākā. Quote Link to comment Share on other sites More sharing options...
e-remit Posted February 18, 2015 Report Share Posted February 18, 2015 (edited) Tur gadījumā WHERE sadaļu nevajag papildināt ar specifications.`name` apstrādi? Vai arī vispār atteikties no tabulas specifications šajā pieprasījumā, uzreiz pieliekot pareizo ID. Edited February 18, 2015 by e-remit Quote Link to comment Share on other sites More sharing options...
Sasa Posted February 18, 2015 Author Report Share Posted February 18, 2015 Bija jāpapildina, jau papildināju. Kā izskatītos selects ja atsakās no specifications tabuls un pieliek pareizo ID? Quote Link to comment Share on other sites More sharing options...
e-remit Posted February 19, 2015 Report Share Posted February 19, 2015 (edited) Nu tad ieliec, kā tev tagad pieprasījums izskatās! Bez tās tabulas, subquery būtu ar ko līdzīgu WHERE product_has_specification.spec_id = 1. Ja tas `name` tev ir vajadzīgs, tad uzliec uz šo lauku indeksu, turklāt šai tabulai tev ir lieks indekss laukam id_specification, jo tas jau ir Primary Key. Tad vari rakstīt šādi: SELECT DISTINCT products.* FROM products WHERE products.product_id IN ( SELECT product_has_specification.product_id FROM product_has_specification WHERE product_has_specification.value='black' AND product_has_specification.spec_id IN ( SELECT specifications.id_specification FROM specifications WHERE specifications.`name` = 'color' ) ) AND products.product_id IN ( SELECT product_has_specification.product_id FROM product_has_specification WHERE product_has_specification.value='s' AND product_has_specification.spec_id IN ( SELECT specifications.id_specification FROM specifications WHERE specifications.`name` = 'size' ) ) Edited February 19, 2015 by e-remit Quote Link to comment Share on other sites More sharing options...
Roze Posted February 19, 2015 Report Share Posted February 19, 2015 Es netiecos pēc īsākā koda, bet pēc optimālākā. Optimālākais varētu būt nelietot šādu datu struktūru meklēšanai, jo jo vairāk dažādas specifikācijas pēc kura produkti tiks meklēti, jo "neoptimālāk" viss paliks. Vispārīgi runājot MySQLam diemžēl nav INTERSECT (kā MS SQL ( https://msdn.microsoft.com/en-us/library/ms188055.aspx)) t.i. atlasīt visus elementus, kuri atbilstu visām prasībām (subselectiem). MySQLā to (bieži) risina ar INNER JOIN taču no performances viedokļa UNION ALL selects un tad grupējot atlasīt elementus kuriem HAVING count(*) >= [parametu skaits] (līdzīgs piemērs, jau diskusijā minēts http://php.lv/f/topic/22133-mysql-produktu-atrib%C5%ABti/#entry176474 ) varētu būt ātrāks: 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.