Problème avec une requête SQL

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • Problème avec une requête SQL

    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.
    Dernière édition par Arkham21 à 25/10/2020, 19h01

  • #2
    oui tu peux tout simplement faire ta requête du genre :

    $query = 'SELECT p.product_id, (...) ORDER BY p.product_sale_start DESC';
    $db->setQuery($query);
    $list_titres=$db->loadRowList();

    Sinon le IN ne fonctionne à ma connaissance que sur des valeurs séparées par des virgules, dans ton cas il s'agit de ;. Mais sinon ton erreur je pense que c'est simplement car tu n'as pas de parenthèse pour entouré ton IN:

    ->orwhere ($db->quote($this->element->catagory_id)."IN(". $db->quoteName('p.id_auteurs_antho').")")
    Plus c'est simple pour l'utilisateur, et plus c'est complexe pour le développeur, et vice versa

    Commentaire

    Annonce

    Réduire
    Aucune annonce pour le moment.

    Partenaire de l'association

    Réduire

    Hébergeur Web PlanetHoster
    Travaille ...
    X