Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 查询多个值的列_Php_Sql_Search - Fatal编程技术网

Php 查询多个值的列

Php 查询多个值的列,php,sql,search,Php,Sql,Search,我有一个看起来有点像下面的表,我正在使用多个字段进行搜索查询,以优化对工作的搜索。目前,我可以输入多个字段,但是,我的搜索结果查询整个数据库,而不仅仅是一个特定的ID 表: contentId meta_key meta_value 1 1 vacancyType Hospitality 2 1 vacancyRole Chef 3 1 vacancyDate

我有一个看起来有点像下面的表,我正在使用多个字段进行搜索查询,以优化对工作的搜索。目前,我可以输入多个字段,但是,我的搜索结果查询整个数据库,而不仅仅是一个特定的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   
代码:

这将返回:

- 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操作

试着像这样使用:


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

为了帮你收拾残局,我一步一步地领着你。也许这并不完全是您想要的,但我认为它将帮助您构建最终查询

要获取空缺类型为$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;

不,页面上的其他内容都正常。查询在这里中断。如果我将其更改回问题中的原始代码,则页面将加载且没有错误。im sry,我已在语句开头查看了双引号。尝试此$getJob1=选择与cms_contentExtra不同的*,其中cms_content.contentId=cms_contentExtra.contentId和cms_contentExtra.meta_值(如“%$type%$key%”)或cms_contentExtra.meta_值(如“%$key%$type%”按cms_content.contentId分组);不,我还没来得及回答,这个问题就消失了我简直不敢相信。。。请用字符串替换变量,例如:$getJob1=选择与cms_contentExtra不同的*,cms_content.contentId=cms_contentExtra.contentId和cms_contentExtra.meta_值,如“%St Albans%Hospitality%”,或cms_contentExtra.meta_值,如“%$Hospitality%St Albans%”,按cms_content.contentId分组;评论不用于扩展讨论;这段对话已经结束,不清楚你想要什么。显示一个表,但查询包含两个表。您显示的结果与显示的表格不匹配。“圣奥尔本斯”突然从哪里来?什么是8435?然后要求meta_值匹配$type和$key两个值中的一个。那么,您希望在结果中看到什么:每个contentid和meta_值一行?还是每个contentid一行?如果是后者:应显示两个meta_值中的哪一个?为什么在没有meta_键的情况下查询meta_值?角色是“管家”还是区域是“管家”都不重要吗?想一想你真正想要什么,然后告诉我们。我很抱歉没有解释清楚。我正在使用另一个表来比较contentId。另一个表只是在定制的CMS系统中存储数据,而contentExtra表存储实际内容。在这一点上,另一个表是相当不相关的。我基本上构建了一个多搜索表单,并存储每个搜索变量以与表进行比较。因此,我需要在同一个COLLMN中搜索多个查询,因为用户有多个搜索输入。我想将存储的变量$type和$key与表中的同一列进行比较。8435是内容不,我还是不明白。也许是因为你没有回答我的任何问题。我建议您显示表定义、示例表数据和与示例表数据匹配的所需输出。我将为您细分:步骤1-构建多输入搜索表单。提取结果并查询数据库。然后将结果存储到两个变量$type和$key中,这两个变量保存搜索的空缺类型和位置。第2步-我想将$type和$key与表上的meta_值单元格进行比较,该表保存作业的元数据,还有其他值我将在将来提取。上面的表格是如何设置表格的一个示例,它包含更多的数据,因此contentId更大。目前它分别提取两个结果,因此如果我搜索st albans并选择hospitality&catering,它将完成st albans的所有工作,以及所有的hospitality&catering工作,而不仅仅是hospitali st albans的ty和餐饮工作。
select distinct contentid
from cms_content
where (meta_key = 'vacancyType' and meta_value = @type)
or (meta_key = 'vacancyArea' and meta_value = @key);
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;