Столбец запроса для нескольких значений

0

У меня есть таблица, которая выглядит примерно так, как показано ниже, и я делаю поисковый запрос с несколькими полями, чтобы уточнить поиск задания. На данный момент я могу войти в несколько полей, однако мои результаты поиска запрашивают всю базу данных, а не только для одного конкретного идентификатора.

Таблица:

    contentId   meta_key        meta_value  
    1   1       vacancyType     Hospitality   
    2   1       vacancyRole     Chef       
    3   1       vacancyDate     2014-01-01     
    4   2       vacancyType     Adin   
    5   2       vacancyArea     St Albans       
    6   2       vacancyDate     2014-01-01   

Код:

    $getJobs1 = "SELECT distinct *
                 FROM  cms_contentExtra, cms_content
                 WHERE cms_contentExtra.meta_value  IN ('$type','$key') 
                 AND cms_content.contentId = cms_contentExtra.contentId
                 GROUP BY cms_content.contentId";        

    $getJobs2 = mysql_query($getJobs1) or die("didn't query");      
    while ($getJobs3 = mysql_fetch_array($getJobs2)) {      
        echo ' - ' . $getJobs3[meta_value] . ' - ' . ' - ' . $getJobs3[contentId];      
    }

Это вернет:

- St Albans - - 8435 - St Albans - - 8436 - Hospitality & Catering - - 8437 - St Albans - - 8440 - Hospitality & Catering - - 8444 - Hospitality & Catering - - 8450 - Hospitality & Catering - - 8451 - St Albans - - 8453

Тем не менее, я хочу показать результаты, которые имеют ОБОИХ область и тип, и игнорировать другие. На данный момент он, кажется, отображает тип, а затем отображает область отдельно, поэтому я не могу показать тип в определенной области.

Я использую две таблицы для сравнения contentId с большим количеством данных, хранящихся в другой таблице.

Теги:
search

2 ответа

0

Давайте более подробно рассмотрим ваш запрос. Вы group by contentId. Таким образом, вы получаете по одной записи за контент. Но вы выбираете *. (Это должен быть MySQL, потому что я не знаю никаких других dbms, допускающих это.) Таким образом, вы получаете запись контента, принадлежащую идентификатору контента, и одну (случайную) запись cms_contentExtra, принадлежащую идентификатору содержимого. Затем вы используете DISTINCT, поэтому вы получаете только отдельные строки. Но строки должны быть разными, потому что они отличаются по крайней мере в идентификаторе содержимого. Сказав это, ваш запрос не имеет смысла, и я рекомендую вам искать GROUP BY и DISTINCT в книге или учебнике. (Кроме того, вы не должны использовать синтаксис соединения, разделенный запятой, который был заменен более двадцати лет назад явным соединением. Вместо этого используйте INNER JOIN.) До сих пор этому :-)

Чтобы очистить вас, я провожу вас шаг за шагом. Возможно, это не совсем то, что вы ищете, но я думаю, что это поможет вам составить окончательный запрос.

Чтобы получить идентификаторы контента с типом вакансии $ type:

select contentid
from cms_content
where meta_key = 'vacancyType' and meta_value = @type;

Чтобы получить идентификаторы контента с ключом местоположения $:

select contentid
from cms_content
where meta_key = 'vacancyArea' and meta_value = @key;

Чтобы получить идентификаторы контента, соответствующие типу $ type или $:

select distinct contentid
from cms_content
where (meta_key = 'vacancyType' and meta_value = @type)
or (meta_key = 'vacancyArea' and meta_value = @key);

Чтобы получить идентификаторы контента, соответствующие типу $ type и $:

select contentid
from cms_content
where (meta_key = 'vacancyType' and meta_value = @type)
or (meta_key = 'vacancyArea' and meta_value = @key)
group by contentid
having count(*) = 2;
0

Оператор IN который вы используете, является операцией OR.

Попробуйте использовать LIKE например:

WHERE cms_contentExtra.meta_value LIKE "%$type%$key%"
OR cms_contentExtra.meta_value LIKE "%$key%$type%"
  • 0
    Нет, все остальное на странице работает. Запрос разбивается здесь. Если я вернусь к исходному коду в вопросе, страница загружается без ошибок.
  • 0
    извините, я видел двойные кавычки в начале заявления. попробуйте это $getJob1 = "SELECT distinct * FROM cms_contentExtra, cms_content WHERE cms_content.contentId = cms_contentExtra.contentId AND (cms_contentExtra.meta_value LIKE '%$type%$key%' OR cms_contentExtra.meta_value LIKE '%$key%$type%') GROUP BY cms_content.contentId";
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню