web-dev-qa-db-fra.com

MySQL: pas comme

J'ai ce texte dans ma base de données,

categories_posts
categories_news
posts_add
news_add

Et je ne veux pas sélectionner les lignes avec categories, j'utilise une requête comme celle-ci,

SELECT *
    FROM developer_configurations_cms

    WHERE developer_configurations_cms.cat_id = '1'
    AND developer_configurations_cms.cfg_variables LIKE '%parent_id=2%'
    AND developer_configurations_cms.cfg_name_unique NOT LIKE '%categories%'

mais il renvoie ces deux dans la sortie aussi ...

categories_posts
categories_news

Comment puis-je les ignorer dans ma requête?

Merci.

54
laukok

categories_posts et categories_news commencez par la sous-chaîne 'categories_' alors il suffit de vérifier que developer_configurations_cms.cfg_name_unique commence par 'catégories' au lieu de vérifier si elle contient la sous-chaîne donnée. Traduire tout cela en une requête:

SELECT *
    FROM developer_configurations_cms

    WHERE developer_configurations_cms.cat_id = '1'
    AND developer_configurations_cms.cfg_variables LIKE '%parent_id=2%'
    AND developer_configurations_cms.cfg_name_unique NOT LIKE 'categories%'
78
Dalen

Je ne sais pas pourquoi

cfg_name_unique NOT LIKE '%categories%' 

renvoie toujours ces deux valeurs, mais peut-être les exclure explicitement:

SELECT *
    FROM developer_configurations_cms

    WHERE developer_configurations_cms.cat_id = '1'
    AND developer_configurations_cms.cfg_variables LIKE '%parent_id=2%'
    AND developer_configurations_cms.cfg_name_unique NOT LIKE '%categories%'
    AND developer_configurations_cms.cfg_name_unique NOT IN ('categories_posts', 'categories_news')
7
Piotr Salaciak