0

I have a search form, and I want to let the user to search one or more authors who writes a book.

I have this code that put the string in an array:

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);
}           


Which outputs something like this:

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

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

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



Now, I have this code for query:

$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));
      }


My problem is this:

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] . '%'));
    }
}



Which outputs:

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

    ))

Which is the last author I search (for example: anf, gli, santone).
How can I search one or more authors, using that array? Thanks.

Ettore
  • 117
  • 4
  • 16
  • 1
    Did you try OR in place of AND here? $conditions[] = array('autori LIKE ? OR autori LIKE ?' => array("%$autore1%","%$autore2%")); – cartina Feb 12 '13 at 10:58
  • This link will help you. http://stackoverflow.com/questions/1127088/mysql-like-in – cartina Feb 12 '13 at 11:01
  • @cartina I'm not using $autore1 and $autore2 anymore, I updated my question. – Ettore Feb 12 '13 at 11:47
  • Can you post the raw sql query here turning on the debug level? – cartina Feb 12 '13 at 12:07
  • What output does this give? if (isset($autore_diviso)) // if I have more than 1 author { $dim=count($autore_diviso); $i=0; $cond=array(); for ($i=0;$i<$dim;$i++) { $cond[]= array["author"] = '%' . $autore_diviso[$i][0] . '%'; } print_r($cond); $conditions['autori LIKE ?'] = array('OR' => implode(',', $cond)); } – cartina Feb 12 '13 at 12:07

1 Answers1

0

I think I solved like this:

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