ray Posted June 13, 2011 Report Share Posted June 13, 2011 Man ir tabula "table1" ar laukiem: id, new_id, keyword_id un vērtībām (1, 2, 3), (2, 2, 4) No web lapas formas tiek atlasīti un izvadīti jaunumi pēc atslēgas vārdiem. Nekādi neizdodas izveidot vaicājumu, kas varētu šo vēlamo darbību veikt. Piemēram, darbība atlasīt visus jaunumus (news_id), kuriem atslēgvārdiem (keyword_id) ir 3 un 4 Kāds var mazliet palīdzēt? Quote Link to comment Share on other sites More sharing options...
Kaklz Posted June 13, 2011 Report Share Posted June 13, 2011 Pieļauju domu, ka tev vajadzētu precizēt jautājumu, jo tavs uzdotais risinās triviāli: select * from table1 where keyword_id IN (3,4) Quote Link to comment Share on other sites More sharing options...
Rincewind Posted June 13, 2011 Report Share Posted June 13, 2011 SELECT news_id FROM table1 WHERE keyword_id IN (3,4) Quote Link to comment Share on other sites More sharing options...
ray Posted June 13, 2011 Author Report Share Posted June 13, 2011 (edited) Atvainojos, laikam mazliet neprecīzi noformulēju. Vajag atlasīt tās ziņas, kuriem ir abi šie atslēgvārdi (keyword_id) nevis viens no abiem - 3 un 4 nevis 3 vai 4 Edited June 13, 2011 by ray Quote Link to comment Share on other sites More sharing options...
php newbie Posted June 13, 2011 Report Share Posted June 13, 2011 nezinu vai labi tā darīt, bet : SELECT news_id FROM table1 WHERE keyword_id IN (3,4) group by news_id having count(*) = 2 /* te keywordu skaits */ Quote Link to comment Share on other sites More sharing options...
ray Posted June 13, 2011 Author Report Share Posted June 13, 2011 tas keywords skaits ir nenoteikts, jo tas ir atkarīgs no tā cik daudz tos atzīmēs formā + nezinu vai tas ir labākais veids, ja šis skaits būs ļoti liels. Quote Link to comment Share on other sites More sharing options...
Rincewind Posted June 13, 2011 Report Share Posted June 13, 2011 Man GROUP BY/HAVING liekas normāls risinājums. Ja nepatīk, var taisīt ar self-join: SELECT t1.id FROM table1 t1 INNER JOIN table1 t2 ON t1.id = t2.id INNER JOIN table1 t3 ON t1.id = t3.id WHERE t1.keyword_id = 3 AND t2.keyword_id = 4 AND t3.keyword_id = 5 Quote Link to comment Share on other sites More sharing options...
Gints Plivna Posted June 14, 2011 Report Share Posted June 14, 2011 tas keywords skaits ir nenoteikts, jo tas ir atkarīgs no tā cik daudz tos atzīmēs formā + nezinu vai tas ir labākais veids, ja šis skaits būs ļoti liels. Ko nozīmē "labākais"? Tāds jēdziens labākais īsti neeksistē, jo vienam labāks ir tāds, kas ātrāk izpildās, otram tāds ko vieglāk uzporgrammēt, trešajam vēl kaut kas. Domāju, ka gan no programmēšanas viegluma viedokļa (ērtāk un ātrāk uzrakstīt), gan ātrdarbības viedokļa (visdrīzāk strādās ātrāk) labāk būtu rakstīt group by variantu. Ja tur paeeksperimentē ar indeksiem, tad iespējams vispār var izbēgt no visādiem tur filesort un temporārām tabulām izpildes plānā. Bija reiz attāli līdzīgs topiks šeit: http://php.lv/f/topic/16068-count-un-group-by-sadarbiba/ Bet, ja mēs runājam par tādā lietām kā ātrdarbība, tad filozofēšanu tur maz ko līdzēs, vajag vienkārši 1kārts paskatīties izpildes plānus 2kārt dabūt kluci ar datiem un notestēt. BTW ja Tev ir 3 ieraksti 5 rindās un to vaicājumu izpilda 3 cilvēki vienreiz dienā, tad no tāda viedokļa ir pilnīgi vienalga kā to raksta. Gints Plivna http://datubazes.wordpress.com/ 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.