2013-02-12 36 views
0

我有一個搜索表單,我想讓用戶搜索一個或多個編寫書籍的作者。

我有這樣的代碼,把字符串數組:
搜索一個或多個作者查詢cakephp

if (strpos($a,' ')||strpos($a,',')) { 
    $autore_diviso = explode(",", $a);    
    $dim=count($autore_diviso); 
    $i=0; 
    for ($i=0;$i<$dim;$i++) 
    { 
     $autore_diviso[$i]=trim($autore_diviso[$i]," ");  
     $autore_diviso[$i] = explode(" ", $autore_diviso[$i]); 
    } 
    debug($autore_diviso); 
}   


其輸出是這樣的:

Array(
[0] => Array 
    (
     [0] => santone 
    ) 

[1] => Array 
    (
     [0] => anfossi 
    ) 

[2] => Array 
    (
     [0] => gli 
    )) 



現在,我有一個查詢的代碼:

$t = $params['titolo']; 
$e = $params['editore']; 
$anno = $params['anno']; 
$anno2 = $params['anno2']; 
$conditions = array( 'editore LIKE' => "%$e%", 
     'titolo LIKE' => "%$t%" 
    ); 
if (isset($autore_diviso)) // if I have more than 1 author 
{ 
    $dim=count($autore_diviso); 
    $i=0; 
    for ($i=0;$i<$dim;$i++) 
    { 
     $conditions['autori LIKE ?'] = array('OR' => array(
      '%' . $autore_diviso[$i][0] . '%')); 
    } } 
else 
     $conditions[]=array('autori LIKE' => "%$a%"); 
if (!$anno&&!$anno2)  
    $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)); 
     } 


我的問題是這樣的:

if (isset($autore_diviso)) // if I have more than 1 author 
{ 
    $dim=count($autore_diviso); 
    $i=0; 
    for ($i=0;$i<$dim;$i++) 
    { 
     $conditions['autori LIKE ?'] = array('OR' => array(
      '%' . $autore_diviso[$i][0] . '%')); 
    } 
} 



它輸出:

Array (
[editore LIKE] => %% 
[titolo LIKE] => %% 
[autori LIKE ?] => Array 
    (
     [OR] => Array 
      (
       [0] => %santone% 
      ) 

    )) 

就是最後筆者我搜索(例如:ANF,GLI,santone)。
如何使用該數組搜索一個或多個作者?謝謝。

+1

你嘗試或者代替這裏? $ conditions [] = array('autori LIKE?OR autori LIKE?'=> array(「%$ autore1%」,「%$ autore2%」)); – cartina 2013-02-12 10:58:16

+0

此鏈接將幫助你。 http://stackoverflow.com/questions/1127088/mysql-like-in – cartina 2013-02-12 11:01:23

+0

@cartina我沒有使用$ autore1和$ autore2了,我更新了我的問題。 – Ettore 2013-02-12 11:47:43

回答

0

我想我解決這樣的:

if (isset($autore_diviso)) { 
$dim=count($autore_diviso); 
$i=0; 
while ($i<$dim) 
{ 
    $conditions[]=array ('autori LIKE ?' => array(
     '%' . $autore_diviso[$i][0] . '%')); 
    $i++; 
} }