在cakePHP 1.2中搜索查询

时间:2013-02-12 08:04:27

标签: mysql cakephp cakephp-1.2

我有这个问题:

$conditions = array(
            'editore LIKE' => "%$e%",
            'titolo LIKE' => "%$t%"
        );
        if (isset($autore_diviso))
            $conditions[] = array('autori LIKE ? AND ?' => array("%$autore1%","%$autore2%"));                   
        else
            $conditions[]=array('autori LIKE' => "%$a%");
        if (!$anno&&!$anno2) // I HAVE TO CHANGE THIS - if the user does not insert any year
            $conditions=$conditions;
        else {
        if (!$anno)
            $conditions[] = array('anno <=' => "$anno2");          
        if (!$anno2)
            $conditions[] = array('anno >=' => "$anno");
        }
        if ($anno&&$anno2)
            $conditions[] = array('anno BETWEEN ? AND ?' => array($anno,$anno2));

其中anno表示年份,editore表示发布者,titolo表示标题。

它正在搜索正好2位作者。
如果我调试$条件,我有例如:

Array (
[editore LIKE] => %%
[titolo LIKE] => %%
[0] => Array
    (
        [autori LIKE ? AND ?] => Array
            (
                [0] => %massi%
                [1] => %palu%
            )

    ) )


但结果是空的。

2 个答案:

答案 0 :(得分:0)

这不是你在PHP中向数组添加元素的方式。此外,没有必要使用显式AND,这是默认值。只有在存在多个相同的数组键时才需要它。

$conditions = array(
    'autori LIKE ? AND ?' => array("%$autore1%","%$autore2%"), 'editore LIKE' => "%$e%",
    'titolo LIKE' => "%$t%"
);

if (!$anno)
    $conditions[] = array('anno <=' => "$anno2");          

if (!$anno2)
    $conditions[] = array('anno >=' => "$anno");

if ($anno&&$anno2)
    $conditions[] = array('anno BETWEEN ? AND ?' => array($anno,$anno2));

答案 1 :(得分:0)

使用此代码解决:

$conditions = array(
        'editore LIKE' => "%$e%",
        'titolo LIKE' => "%$t%"
    );
    if (isset($autore_diviso))
        $conditions[] = array('autori LIKE ? AND autori LIKE?' => array("%$autore1%","%$autore2%"));                    
    else
        $conditions[]=array('autori LIKE' => "%$a%");
    if (!$anno&&!$anno2)    // Da sistemare.
        $conditions=$conditions;
    else {
    if (!$anno)
        $conditions[] = array('anno <=' => "$anno2");          
    if (!$anno2)
        $conditions[] = array('anno >=' => "$anno");
    }
    if ($anno&&$anno2)
        $conditions[] = array('anno BETWEEN ? AND ?' => array($anno,$anno2));
    debug($conditions);