Oznámení
Omlouváme se, provoz fóra byl ukončen
kombinace AND a OR ve WHERE
Upozornění: Tohle vlákno je hodně staré.
před 10 lety
- wnc
- Člen | 7
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)
před 10 lety
- wnc
- Člen | 7
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)
před 9 lety
- mprokes
- Člen | 10
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)