Jump to content
php.lv forumi

Recommended Posts

Posted (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 by sheps
Posted

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

Posted

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

Posted

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

Posted

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

Posted

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))).")";

Posted

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

Posted

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

Posted

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 )

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