Jump to content
php.lv forumi

MYSQL IN or REGEXP


sheps

Recommended Posts

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 by sheps
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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 :)

Link to comment
Share on other sites

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

Link to comment
Share on other sites

...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

Link to comment
Share on other sites

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 :)

Link to comment
Share on other sites

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ā.

Link to comment
Share on other sites

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 )

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...