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
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 ...
× 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.