Problème sur une requête sql

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

  • Problème sur une requête sql

    Bonjour, voila mon problème dans le Model utiliser pour afficher une recherche plusieurs critères sont disponible; titre, auteur, sous-titre ... Dans ma View de recherche je propose de choisir entre un AND ou un OR entre les critères. Tous fonctionnez très bien jusqu'au moment ou il a fallu que je fusionne certain champ pour la recherche titre et sous-titre devant posséder un OR entre les critères. et depuis cela ne fonctionne plus.
    //Recheche avancée titre et autre ...

    if ($titles = $this->getState('title'))
    {
    //j'enleve le prefixe du titre pour la recherche
    $titles = preg_replace ("#^(le |la |les |LE |LA |LES )#","",$titles);
    $query->Where("`title` LIKE '%" . $titles . "%'")
    ->orWhere("`subtitle` LIKE '%" . $titles . "%'")
    ->orWhere("`coll5` LIKE '%" . $titles . "%'");
    }
    if ($author_adv = $this->getState('author_adv'))
    {
    //Il faut creer un table avec chaque terme et effectuer une recherche de ceux ci
    $authors = preg_split("/[\s,]+/",$author_adv)
    $this->input->set('authors', ['title' =>$authors]);
    }
    if (($authors = $this->getState('authors')
    && array_filter($authors))
    {
    $this->whereHas('authors', function(\JDatabaseQuery $q) use ($authors)
    {
    if (!empty($authors['title']))
    foreach ($authors['title'] as $searchauth)
    $q->where('`title` LIKE "%' . $searchauth . '%"');
    if (!empty($authors['id']))
    $q->where('`pivotTable`.`nglibrary_author_id` = ' . $q->q($authors['id']) . '');
    });
    }
    y aurait-il une autre solution ?
    merci pour votre aide

  • #2
    Ok cela semble fonctionner comme ceci :
    if ($titles = $this->getState('title'))

    {

    //j'enleve le prefixe du titre pour la recherche

    $titles = preg_replace ("#^(le |la |les |LE |LA |LES )#","",$titles);

    $query->Where("(`title` LIKE '%" . $titles . "%' OR `subtitle` LIKE '%" . $titles . "%' OR `coll5` LIKE '%" . $titles . "%')");

    }

    Commentaire


    • #3
      et bien non cela ne fonctionne pas mieux. Si j'utilise cette solution toutes les autres requêtes where utilise le OR par default et non un AND comme choisie auparavant .

      Commentaire


      • #4
        Hello

        Le + simple est d'afficher provisoirement pendant la phase de debugage la requête avec un

        Code PHP:
        JFactory::getApplication()->enqueueMessage($query->__toString()); 
        Et de récupérer la requête pour la tester et éventuellement la corriger avec phpmyadmin (par exemple).

        Voir ce post...
        A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
        Rejoignez le Joomla Users Groupe Alsace...
        roland_d_alsace va-t-il devenir roland_du_grand_est ?

        Commentaire

        Annonce

        Réduire
        Aucune annonce pour le moment.

        Partenaire de l'association

        Réduire

        Hébergeur Web PlanetHoster
        Travaille ...
        X