sheps Posted July 23, 2010 Report Share Posted July 23, 2010 (edited) Hello :) ir kāds, kas zin, kas strādā ātrāk no mysql funkcijām IN() or REGEXP()? piemērs varētu būt šāds: "SELECT id FROM tabula WHERE id IN ('1','2')" un otrs: "SELECT id FROM tabula WHERE id REGEXP (^1$|^2$|^3$)" var arī bez ^ un $ ja 1,2,3 vietā ir pietiekami lieli skaitļi.. tātad jautājums paliek aktuāls, kas ātrāks? Edited July 23, 2010 by sheps Quote Link to comment Share on other sites More sharing options...
Grey_Wolf Posted July 23, 2010 Report Share Posted July 23, 2010 ir kāds, kas zin, kas strādā ātrāk no mysql funkcijām IN() or REGEXP()? Vienoziimiigi pirmais varjants.. Piedevam sobriid megjini samaisiit divas Pilniigi atskjirigas lietas .. P.S. REGEXP pats par sevi ir sameraa lens, jebkuraa prog. valodaa shamais buus lenaks par citam alternativaam funkcijam Quote Link to comment Share on other sites More sharing options...
sheps Posted July 23, 2010 Author Report Share Posted July 23, 2010 nu principā tā man jau arī likās :) bet regexp ir daudz lielākas iespējas, ja nav citu variantu, tad neko darīt.. ps: manis rakstītajā piemērā arī novērojama atšķirība, ka 1. piemērā vērtība tiek meklēta dotajā, bet 2. piemērā vērtība tiek meklēta iekš id ar dotajiem lielumiem.. Bieži vajadzīgs otrais variants un tad IN neštīmēs :) Quote Link to comment Share on other sites More sharing options...
Grey_Wolf Posted July 23, 2010 Report Share Posted July 23, 2010 manis rakstītajā piemērā arī novērojama atšķirība, ka 1. piemērā vērtība tiek meklēta dotajā, bet 2. piemērā vērtība tiek meklēta iekš id ar dotajiem lielumiem.. Bieži vajadzīgs otrais variants un tad IN neštīmēs :) Cik noverots tad biezk tiks izmantots pirmais varjants, (ja runa par ID) ja atlase javeic pec kautkaadiem kriterijiem , teiksim varda daljas etc, tad bez regexp neiztikt.. IN() parasti izmanto lai atrastu jau ieprieks atlasiitu vertibu virkni citaa tabulaa.. piemeram useris atkjeksee kautkaadu 'kaudziti' no dziesmu (vi kada cita) saraksta, tad izmantot regexp butu apsaluuti mulkjiigi ... arii atlasiisana pec varda etc. daljas vienmer iespejams izmantot LIKE SELECT * FROM tbulis WHERE vards LIKE '%anis' atlasiis visus ierakstus piem Janis, Banis, kanis ... + var arii veidot shadu LIKE konstrukciju %anis%brauc% -> atgrieziis piemeram tekstu visi bani lido un brauc uz xxx taa kaa, par atlasi SQL ir padomats ljoti rupiigi un RegExp praktiski tiek pielietots reti, tieshi tadelj ka pec savas buutibas ir sameraa lens ( salidzinasanas algoritma delj) P.S. arii tavu 2 vrjantu var uzrakstiit ar LIKE SELECT * FROM tabulis id LIKE '1%' OR id LIKE '2%' OR id LIKE '2%' Ariii shadi buus atrak kaa ar RegExp Quote Link to comment Share on other sites More sharing options...
sheps Posted July 23, 2010 Author Report Share Posted July 23, 2010 ...novērojama atšķirība, ka 1. piemērā vērtība tiek meklēta dotajā, bet 2. piemērā vērtība tiek meklēta iekš id ar dotajiem lielumiem.. to ka regexp labāk vairumā necensties izmantot ir saprotams, bet no citāta redzams faktiski vienigais iemesls, kāpēc bez regexp līdzīga rakstura gadijumā neiztikt.. ar cipariem vēl viss vnk, piem: (dota $virkne 1,2,3,4,5 utt. atlasīt id, kas atrodas virknē) ciparus ieliek pēdiņās ar str_replace(",","','",$virkne) "SELECT * FROM table WHERE id IN ('$virkne')" bet ja lieta sāk grozīties ar kkādām nebūt pārbaudēm cipars vai burts utt.. ar sql nenāk prātā cits veids kā regexp.. jau aizbrauc no topika.. jautājums jau sen atbildēts :) IN ātrāks kā REGEXP Quote Link to comment Share on other sites More sharing options...
marcis Posted July 23, 2010 Report Share Posted July 23, 2010 Ko? :D Un integeri nav jāliek pēdiņās. $virkne = '1,2,3,4,5'; $sql = "SELECT * FROM `table` WHERE `id` IN (".implode(', ', array_map('intval', explode(',', $virkne))).")"; Quote Link to comment Share on other sites More sharing options...
sheps Posted July 23, 2010 Author Report Share Posted July 23, 2010 Ko? :D Un integeri nav jāliek pēdiņās. $virkne = '1,2,3,4,5'; $sql = "SELECT * FROM `table` WHERE `id` IN (".implode(', ', array_map('intval', explode(',', $virkne))).")"; kāda jēga explode un implode sarežģī procesu tikai.. masiivu veidošana jau manuprāt ir krietni ilglaiciigaka par parastu texta apstraadi.. JO galarezultātā mysql dariis vienu un to pašu, tad kapēc neatvieglot php :) Quote Link to comment Share on other sites More sharing options...
marcis Posted July 24, 2010 Report Share Posted July 24, 2010 Es neko nesarežģīju, es to daru pareizi. Tev tiešām derētu pamācīties kas ir strings un kas ir integeris. Tāpat visdrīzāk tev $virkne jau uzreiz būs masīvs, ko radīsi tu pats. Ja mainīgais $virkne tiek savākts no, piemēram, $_GET masīva, tad tas būs strings un validēt tev viņu nāksies jebkurā gadījumā. Quote Link to comment Share on other sites More sharing options...
Grey_Wolf Posted July 24, 2010 Report Share Posted July 24, 2010 bet ja lieta sāk grozīties ar kkādām nebūt pārbaudēm cipars vai burts utt.. ar sql nenāk prātā cits veids kā regexp.. Shajaa gadijumaa piekritiishu, tapec jau tas reGExp ir domaats, tik vienmer japaskatas vai tiesam nav citu risinajumu (vienkarsaku, nevis savadaku ) 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.