查询多个值的列

时间:2014-11-11 11:25:30

标签: php sql search

我有一个看起来有点像下面的表,我正在使用多个字段进行搜索查询以优化搜索作业。目前我可以进入多个字段,但是,我的搜索结果会查询整个数据库,而不仅仅是查询一个特定的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与存储在不同表中的更多数据进行比较。

2 个答案:

答案 0 :(得分:0)

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

尝试使用LIKE,例如:

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

答案 1 :(得分:0)

让我们仔细看看您的查询。您按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;