繁体   English   中英

查询列中的多个值

[英]Query column for multiple values

我有一张看起来有点像下面的表格,并且我正在使用多个字段进行搜索查询以优化对工作的搜索。 目前,我可以输入多个字段,但是我的搜索结果将查询整个数据库,而不仅仅是一个特定的ID。

表:

    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与存储在另一个表中的更多数据进行比较。

您使用的IN操作数是OR操作。

尝试使用LIKE例如:

WHERE cms_contentExtra.meta_value LIKE "%$type%$key%"
OR cms_contentExtra.meta_value LIKE "%$key%$type%"

让我们仔细看看您的查询。 您按contentId分组。 因此,每个contentId可获得一条记录。 但是您选择*。 (这必须是MySQL,因为我不知道任何其他dbms允许这样做。)因此,您将获得属于该内容ID的内容记录,以及一个属于该内容ID的(随机)cms_contentExtra记录。 然后,您使用DISTINCT,因此仅获得不同的行。 但是这些行必须是不同的,因为它们至少在内容ID上有所不同。 话虽如此,您的查询没有任何意义,我建议您在书或教程中查找GROUP BY和DISTINCT。 (此外,您不应使用逗号分隔的联接语法。二十多年前,该语法已被显式联接取代。使用INNER JOIN代替。)到目前为止:-)

为了帮您清理,我会逐步引导您。 也许这并不是您想要的,但我认为它将帮助您构建最终查询。

要获取具有空缺类型$ type的内容ID:

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

要获取具有$ key位置的内容ID:

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

要获取与$ type或$ key匹配的内容ID:

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

要获取同时与$ type和$ key匹配的内容ID:

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM