8795 sujets

Développement web côté serveur, CMS

Bonjour, j'ai cette requête sql qui marche bien (et me retourne 12 résultats)

SELECT DISTINCT c.id AS classified_id,c.category,c.action 
FROM wp_bp_classifieds c 
INNER JOIN wp_bp_classifieds_classifiedmeta cm ON cm.classified_id = classified_id 


Ma table cm (wp_bp_classifieds_classifiedmeta) se présente comme ceci :

id 	classified_id 	meta_key 	meta_value


J'aimerais rajouter une condition qui vérifie que, pour cet id; il y a une ligne dans cm qui a pour meta_key groups et pour meta_value "8" (avec les guillemets).

J'ai essayé ceci


SELECT DISTINCT c.id AS classified_id,c.category,c.action FROM wp_bp_classifieds c 
INNER JOIN wp_bp_classifieds_classifiedmeta cm ON cm.classified_id = classified_id 
WHERE (cm.meta_key='groups' AND cm.meta_value LIKE '%"8"%')


Mais il me retourne exactement les même résultats que la première requête.
Une idée ?

Merci BCP !
Bijour
Et comme ça ?

INNER JOIN wp_bp_classifieds_classifiedmeta cm ON cm.classified_id = c.id

Modifié par loicbcn (10 Nov 2009 - 14:38)
...Il me reste un soucis mineur :

la ligne qui ajoute cette condition à ma requête :

$more_sql['group'] = "cm.meta_key = 'groups' AND cmmeta_value LIKE '\"8\"'"


avec ça, ça fonctionne. Mais dès que j'essaie d'ajouter des %% dans le LIKE, la requête semble devenir invalide :

$more_sql['group'] = "cm.meta_key = 'groups' AND cmmeta_value LIKE '%\"8\"%'"


J'ai aussi essayé en "escapant" les %; ça ne marche pas non plus

$more_sql['group'] = "cm.meta_key = 'groups' AND cmmeta_value LIKE '\%\"8\"\%'"


Merci !
Salut,

ça serait sûrement une bonne idée de revoir les bases de SQL : http://sqlpro.developpez.com/

En l'occurrence l'opérateur LIKE.

Au niveau du PHP il n'y a rien à échapper à l'exception éventuellement des quotes ou des guillemets en fonction de celui qui te sert à contenir la chaîne de caractères. C'est donc inutile dans ton cas :
$more_sql['group'] = "cm.meta_key = 'groups' AND cmmeta_value LIKE '%8%' "
@Heyoan : c'est bien ce qui me semblait (pour l'échappement).
Le truc c'est que je veux faire une recherche sur un champs qui contiendrait "8" (avec les guillemets".

$more_sql['group'] = "cm.meta_key = 'groups' AND cmmeta_value LIKE '\"8\"'";


fonctionne, mais

$more_sql['group'] = "cm.meta_key = 'groups' AND cmmeta_value LIKE '%\"8\"'%";


ne marche pas et je ne comprend pas pourquoi !
Ah OK...

En tout cas je ne vois pas pourquoi ta première requête fonctionne mais pour la seconde il faut mettre :
$more_sql['group'] = "cm.meta_key = 'groups' AND cmmeta_value LIKE '%\"8\"%' ";