Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SQLITE] Requête de recherche avec ou sans '-'

    2 septembre 2019 à 17:26:23

    Bonjour à tous,

    Je suis en train de me faire une petite appli pour gérer des pièces détachées au boulot (rien de bien méchant).

    Pour mon besoin, je veux faire un 'moteur de recherche' le plus simple possible : Référence ou désignation / marque / type.

    Forcément, qui dit plusieurs marques, dit plusieurs formats de références (00-000-00 ou A00A-000-000, 0AAA0000 ...) enregistrées en bdd.

    Bref, vous me voyez venir. Est-il possible via uniquement une requête SQL de faire en sorte de retourner un résultat quelque soit la chaîne entrée en recherche ? Je précise, je me sers de LIKE %q% avec q étant ma chaîne recherchée.

    Un exemple : j'ai une référence 00-874-254. Si je rentre 874, j'ai un résultat, si je rentre 00-874 j'ai un résultat, si je rentre 00874 ou 00 874 je n'ai rien, alors que j'aimerais avoir le résultat 00-874-254 (au moins).

    Si vous voyez ce que je veux dire ...

    Ci-dessous ma requête :

    SELECT 
                            p.part_id AS part_id,
                            b.part_brand_name AS part_brand_name,
                            c.part_category AS part_category,
                            p.part_label AS part_label,
                            p.part_reference_1 AS part_reference_1,
                            p.part_reference_2 AS part_reference_2,
                            p.part_sn AS part_sn
                        FROM 
                            parts AS p
                        JOIN 
                            parts_brands AS b       ON b.part_brand_id = p.part_brand_id
                        JOIN 
                            parts_categories AS c   ON c.part_category_id = p.part_category_id
                        WHERE 
                        (
                            part_reference_1 LIKE :q
                        OR 
                            part_reference_2 LIKE :q
                        OR 
                            part_sn LIKE :q
                        OR 
                            part_label LIKE :q
                        )
                        AND p.part_brand_id LIKE :bnd 
                        AND p.part_category_id LIKE :cat

    Merci d'avance pour votre aide.

    • Partager sur Facebook
    • Partager sur Twitter
    Kwo:re / topic OC | Aidez les autres, indiquez un sujet résolu ! | Vous êtes bloqué ? Suivez le guide ! | N'aide pas par MP
      2 septembre 2019 à 17:37:27

      Bonjour,

      Si tu es sûr de ne vouloir exclure que le caractère "-", alors tu peux le faire dans ta requête :

      SELECT
      	p.part_id AS part_id,
      	b.part_brand_name AS part_brand_name,
      	c.part_category AS part_category,
      	p.part_label AS part_label,
      	p.part_reference_1 AS part_reference_1,
      	p.part_reference_2 AS part_reference_2,
      	p.part_sn AS part_sn
      FROM
      	parts AS p
      	JOIN parts_brands AS b
      		ON b.part_brand_id = p.part_brand_id
      	JOIN parts_categories AS c
      		ON c.part_category_id = p.part_category_id
      WHERE (
      		REPLACE( part_reference_1, '-', '' )	LIKE REPLACE( :q, '-', '' )
      	OR	REPLACE( part_reference_2, '-', '' )	LIKE REPLACE( :q, '-', '' )
      	OR	REPLACE( part_sn, '-', '' )				LIKE REPLACE( :q, '-', '' )
      	OR	REPLACE( part_label, '-', '' )			LIKE REPLACE( :q, '-', '' )
      )
      AND p.part_brand_id LIKE :bnd
      AND p.part_category_id LIKE :cat

      Cela n'est pas très élégant et pas très performant, mais devrait faire le taff ...

      Si la variabilité est plus importante, il faudra choisir un autre fonctionnement ...

      -
      Edité par Benzouye 2 septembre 2019 à 17:38:22

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL

      [SQLITE] Requête de recherche avec ou sans '-'

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown