Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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 如何选择某些meta_键的所有meta值?_Php_Mysql_Sql_Wordpress - Fatal编程技术网

Php 如何选择某些meta_键的所有meta值?

Php 如何选择某些meta_键的所有meta值?,php,mysql,sql,wordpress,Php,Mysql,Sql,Wordpress,我想提出一个问题,但我搞不懂。我想通过某些meta_键选择所有记录。当我通过一个元键进行查询时,它工作得很好。但是当我想通过两个meta_键进行查询时,它什么也不返回。谁能帮帮我吗 有效的查询: 挑选* 从'uszc_users'作为u,'uszc_utilizatori_acord'作为ua,'uszc_usermeta'作为ub 其中ua.email=u.user\u email 和ub.user_id=u.id 和ub.meta_key='first_name' 和acord='DA' 限

我想提出一个问题,但我搞不懂。我想通过某些meta_键选择所有记录。当我通过一个元键进行查询时,它工作得很好。但是当我想通过两个meta_键进行查询时,它什么也不返回。谁能帮帮我吗

有效的查询:

挑选* 从'uszc_users'作为u,'uszc_utilizatori_acord'作为ua,'uszc_usermeta'作为ub 其中ua.email=u.user\u email 和ub.user_id=u.id 和ub.meta_key='first_name' 和acord='DA' 限制0,30 以及不返回任何内容的查询:

挑选* 从'uszc_users'作为u,'uszc_utilizatori_acord'作为ua,'uszc_usermeta'作为ub 其中ua.email=u.user\u email 和ub.user_id=u.id 和ub.meta_key='first_name' 和ub.meta_key='last_name' 和acord='DA' 限制0,30
我有3个表,表uszc_usermeta包含“名字”和“姓氏”,这两个表都在“meta_值”列中。

您要求的是meta_键同时等于“名字”和“姓氏”的所有记录。您可能想做一些类似于和ub.meta_的事情,输入“first_name”、“last_name”


你不能有任何记录

AND ub.meta_key = 'first_name'
AND ub.meta_key = 'last_name'
这毫无意义,所以就这么简单:

SELECT *
FROM `uszc_users` AS u, `uszc_utilizatori_acord` AS ua, `uszc_usermeta` AS ub
WHERE ua.email = u.user_email
AND ub.user_id = u.id
AND (ub.meta_key = 'first_name'
OR ub.meta_key = 'last_name')
AND acord = 'DA'
LIMIT 0 , 30
更新,因为OP说@bhelmet发布了正确的答案,我想为OP澄清好的查询应该是什么样子的imho:

SELECT u.*, ub.meta_value first_name, uc.meta_value last_name
FROM `uszc_users` AS u  
INNER JOIN `uszc_utilizatori_acord` AS ua
ON ua.email = u.user_email
  AND ua.acord = 'DA'
INNER JOIN  `uszc_usermeta` AS ub
ON ub.user_id = u.id
  AND ub.meta_key = 'first_name'
INNER JOIN `uszc_usermeta` AS uc
ON uc.user_id = u.id
  AND uc.meta_key = 'last_name'
LIMIT 0 , 30

要检查“usermeta”的两个条件,您应该连接表两次。你需要这样的东西:

SELECT *
FROM `uszc_users` AS u, `uszc_utilizatori_acord` AS ua, `uszc_usermeta` AS ub, `uszc_usermeta` AS uc
WHERE ua.email = u.user_email
AND ub.user_id = u.id
AND ub.meta_key = 'first_name'
AND uc.user_id = u.id
AND uc.meta_key = 'last_name'
AND acord = 'DA'
LIMIT 0 , 30

提供一些原始数据和预期结果的样本。这里有3个表吗?是的。我有三张桌子。为什么?您应该使用正确的连接语法并以某种方式对结果进行分组。这首先返回所有带有meta_键“first_name”的记录,然后返回所有带有meta_键“last_name”的记录。我想坐在同一排。这可能吗?编辑您的问题以添加更多详细信息,尤其是所需输出的示例。一个简单的表结构示例也会很有用。我希望meta_value列上的同时有名字和姓氏。哦,天哪,这最适合我的需要。非常感谢你。但是如果我需要选择某些列怎么办?!因为现在我得到了这个错误1052-字段列表中的“meta_value”列是模糊的,我认为这是因为使用这个查询后的列名相同。如果meta_值列在表中有两次,我将如何选择记录?meta_键的meta_值:“first_name”和“last_name”现在位于两个不同的meta_值列中。@lonut我不太明白,如果您将“meta_值”与别名一起使用,例如ub.meta_值和uc.meta_值,您不应该因为歧义而出现错误。使用@bhelmet解决方案后,我遇到了一些问题。如果meta_值列在表中有两次,我将如何选择记录?meta_key的meta_值:“first_name”和“last_name”现在位于两个不同的meta_值列中。您还有很多问题,只是还不知道:-您能帮我吗?!更新的查询引发错误。是否检查了上一个查询?有一些拼写错误,但我相信我已经解决了。你有什么错误?现在可以了。谢谢你,伙计。我会接受这个答案作为解决办法。非常感谢你。
SELECT *
FROM `uszc_users` AS u, `uszc_utilizatori_acord` AS ua, `uszc_usermeta` AS ub, `uszc_usermeta` AS uc
WHERE ua.email = u.user_email
AND ub.user_id = u.id
AND ub.meta_key = 'first_name'
AND uc.user_id = u.id
AND uc.meta_key = 'last_name'
AND acord = 'DA'
LIMIT 0 , 30