Requete SQL

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

  • Requete SQL

    Bonjour, j'ai besoin besoin d'effectuer une recherche sur un champ.
    J'ai ceci comme exemple sur un autre champ :

    Code PHP:
    if (($editor $this->getState('editor'))
    && 
    array_filter($editor))
    {
    $this->whereHas('editor', function(\JDatabaseQuery $q) use ($editor) {
    $q->where('`title` = "' $editor['title'] . '"');
    });

    J'ai essayé une requete sous cette forme :

    Code PHP:
    if ($titles $this->getState('title'))
    {
    //j'enleve le prefixe du titre pour la recherche
    $titlespreg_replace ("#^(le |la |les |LE |LA |LES )#","",$titles);
    $subtitles$titles;
    $co_titles $titles;

    $this->whereHas('books', function(\JDatabaseQuery $q) use ($titles)
    {
    if (!empty(
    $titles['title']))
    $q->where('`title` = "' $titles '"');
    if (empty(
    $titles['subtitle']))
    $q->where('`subtitle` = "' $titles '"');
    if (empty(
    $titles['coll5']))
    $q->where('`coll5` = "' $titles '"');

    });


    Mai sle plantage est direct.
    Quelqu'un pourrait-il m'expliquer d'ou cela peut venir.et a quoi correspond le premier 'books' ?
    Merci
    Dernière édition par cavo789 à 19/02/2020, 10h02

  • #2
    Bonjour,

    N'aurais-tu pas dans la table traitée quelques données où le préfixe du titre serait : soit l', soit L' ?
    Tu devrais ajouter ces 2 cas de figure dans la ligne contenant la commande "preg_replace".
    Bonne journée.

    Commentaire


    • #3
      Bonjour lendrevi et merci pour ta réponse.
      Concernant le rejet d'article c'est réglé et correct.
      Le problème concernait plus la requête SQL. Mon composant fonctionne avec fof3 d'où certain raccourci.
      Mais là, mon problème venait du whereHas qui n'a pas lieu d'être à cet endroit puisque la table est déjà ouverte.
      En fait cette requête ci suffit :
      Code PHP:
       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 "%'");

      Dernière édition par lesoutier à 21/02/2020, 09h28

      Commentaire


      • #4
        Bon et bien après moult tests cela ne fonctionne pas vraiment .
        Si tôt que je met un orWhere dans ma requête Joomla le prend systématiquement comme critère par défaut.
        Ce qu'il faut comprendre, c'est que dans le model utilisé il y a d'autre critères de recherche qui eux peuvent être utilisés dans la recherche avec un _outerGlue modifiable en AND ou en OR.
        Ma dernière tentative est celle-ci :
        if ($titles = $this->getState('title'))
        {
        //j'enleve le prefixe du titre pour la recherche
        $multititles = preg_replace ("#^(le |la |les |LE |LA |LES )#","",$titles);
        $titles= array();
        $titles[] = "`title` LIKE '%" . $multititles . "%'";
        $titles[] = "`subtitle` LIKE '%" . $multititles . "%'";
        $titles[] = "`coll5` LIKE '%" . $multititles . "%'";

        foreach ($titles as $searchtitle)
        $query->where($searchtitle)
        ->extendWhere('AND',$searchtitle,'OR');
        }

        Commentaire

        Annonce

        Réduire
        Aucune annonce pour le moment.

        Partenaire de l'association

        Réduire

        Hébergeur Web PlanetHoster
        Travaille ...
        X