Odkazy: dibi | API reference

Forum: [česky] [english]

dibi fórum

tiny ‘n’ smart
database layer

Nejste přihlášen(a)

#1 před 3 lety

wnc
Nový člen
Registrovaný: 28. 3. 2009
Příspěvky: 8

kombinace AND a OR ve WHERE

Ahoj, řešil jsem kombinaci AND a OR v jedné WHERE podmínce. Vymyslel jsem něco takovéhleho:

<?php
$words = split(' ',$query);
$fluent = dibi::select('*')->from('poeples');
$driver = dibi::getConnection()->getDriver();

foreach ($words as $word)  {
        $word = $driver->escape('%'.$word.'%',Dibi::TEXT);
        $fluent->where("(`jmeno` LIKE $word OR `prijmeni` LIKE $word)");
}

$fluent->test();
?>

Docela to funguje. Problém ale nastane při escapování apostrofů. Je-li jméno například John Mc'Donald, vypadá výsledek takto:

SELECT *
FROM `peoples`
WHERE (`jmeno` LIKE '%John%' OR `prijmeni` LIKE '%John%') AND (`jmeno` LIKE '%Mc\\'Donald%' OR
`prijmeni` LIKE '**Extra modifier %Mc**\'Donald%')

Tuší někdo, proč je výraz obsahující apostrof pokaždé jiný?

Editoval wnc (7. 7. 2009 22:50)

 

#2 před 3 lety

wnc
Nový člen
Registrovaný: 28. 3. 2009
Příspěvky: 8

Re: kombinace AND a OR ve WHERE

Tak se to nakonec podařilo vyřešit. Výsledek je zde:

<?php
$words = split(' ',$query);
$fluent = dibi::select('*')->from('poeples');

foreach ($words as $word)  {
        $word = '%'.$word.'%';
        $fluent->where("(`jmeno` LIKE %s OR `prijmeni` LIKE %s)",$word,$word);
}

$fluent->test();
?>

Editoval wnc (7. 7. 2009 23:16)

 

#3 před rokem

mprokes
Člen
Registrovaný: 28. 7. 2009
Příspěvky: 10

Re: kombinace AND a OR ve WHERE

nebo zkusit třeba

<?php
...
$word = '%'.$word.'%';
$fluent->where('( [jmeno]')->like ('%s', $word)
       ->or('[prijmeni]')  ->like ('%s', $word)
       ...
       ->or('[prezdivka]') ->like ('%s )', $word);
...
?>

Editoval mprokes (25. 2. 2010 23:27)

 

Zápatí