Bonjour,
Je rencontre un gros problème avec une requête SQL.
J'essaye désespérément de faire une requête avec soit IN soit LIKE.
Voici la requête :
$db = JFactory::getDbo();
$query=$db->getQuery(true);
$query
->select(array($db->quoteName('p.product_id'), $db->quoteName('p.product_name'),$db->quoteName('f.file_path'),$db->quoteName('p.product_alias')))
->from($db->quoteName('#__hikashop_product','p'))
->join('INNER',$db->quoteName('#__hikashop_file','f').'ON ('.$db->quoteName('p.product_id').'='.$db->quoteName('f.file_ref_id').')')
->where ("(".$db->quoteName('p.product_manufacturer_id')."='".$th is->element->category_id."'")
->where ($db->quoteName('p.product_published')."="."1")
->where ($db->quoteName('f.file_type')."=".'"product"')
->where ($db->quoteName('p.product_parent_id')."=".'0'.")")
->orwhere ("(".$db->quoteName('p.id_auteurs_antho')."LIKE". $db->quote("%,".$this->element->catagory_id.",%").")")
->order('p.product_sale_start DESC');
$db->setQuery($query);
$list_titres=$db->loadRowList();
p.id_auteurs_antho est actuellement de la forme ";id1;id2;id3;". (par exemple ";32;68;256;"
Deux problèmes :
- si je n'entoure l'id recherché que par "%", il va pr exemple me prendre 25 comme id valable (25 est contenu dans 256). Il va pr ailleurs m'ignorer la première valeur (dans l'exemple 32).
- si j'entoure l'id recherché par "%,", il ne va rien trouver...
Le plus simple serait peut être une condition avec IN.
J'ai essayé
->orwhere ($db->quote($this->element->catagory_id)."IN". $db->quoteName('p.id_auteurs_antho'))
Dans ce cas p.id_auteurs_antho est de type "(id1,id2,id3,id4)".
mais j'ai ce type d'erreur :
1064 - Erreur de syntaxe près de '`p`.`id_auteurs_antho`) ORDER BY p.product_sale_start DESC' à la ligne 6
Pouvez-vous me dire quelle syntaxe employer ?
Je trouve que cette "méthode" pour créer les requêtes est vraiment lourde... Ne peut-on pas écrire simplement la totalité de la requête SQL plutôt que d'utiliser cette manière ?
Merci d'avance pour votre aide.
Je rencontre un gros problème avec une requête SQL.
J'essaye désespérément de faire une requête avec soit IN soit LIKE.
Voici la requête :
$db = JFactory::getDbo();
$query=$db->getQuery(true);
$query
->select(array($db->quoteName('p.product_id'), $db->quoteName('p.product_name'),$db->quoteName('f.file_path'),$db->quoteName('p.product_alias')))
->from($db->quoteName('#__hikashop_product','p'))
->join('INNER',$db->quoteName('#__hikashop_file','f').'ON ('.$db->quoteName('p.product_id').'='.$db->quoteName('f.file_ref_id').')')
->where ("(".$db->quoteName('p.product_manufacturer_id')."='".$th is->element->category_id."'")
->where ($db->quoteName('p.product_published')."="."1")
->where ($db->quoteName('f.file_type')."=".'"product"')
->where ($db->quoteName('p.product_parent_id')."=".'0'.")")
->orwhere ("(".$db->quoteName('p.id_auteurs_antho')."LIKE". $db->quote("%,".$this->element->catagory_id.",%").")")
->order('p.product_sale_start DESC');
$db->setQuery($query);
$list_titres=$db->loadRowList();
p.id_auteurs_antho est actuellement de la forme ";id1;id2;id3;". (par exemple ";32;68;256;"
Deux problèmes :
- si je n'entoure l'id recherché que par "%", il va pr exemple me prendre 25 comme id valable (25 est contenu dans 256). Il va pr ailleurs m'ignorer la première valeur (dans l'exemple 32).
- si j'entoure l'id recherché par "%,", il ne va rien trouver...
Le plus simple serait peut être une condition avec IN.
J'ai essayé
->orwhere ($db->quote($this->element->catagory_id)."IN". $db->quoteName('p.id_auteurs_antho'))
Dans ce cas p.id_auteurs_antho est de type "(id1,id2,id3,id4)".
mais j'ai ce type d'erreur :
1064 - Erreur de syntaxe près de '`p`.`id_auteurs_antho`) ORDER BY p.product_sale_start DESC' à la ligne 6
Pouvez-vous me dire quelle syntaxe employer ?
Je trouve que cette "méthode" pour créer les requêtes est vraiment lourde... Ne peut-on pas écrire simplement la totalité de la requête SQL plutôt que d'utiliser cette manière ?
Merci d'avance pour votre aide.
Commentaire