Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.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 在MySQL中选择两个表中的查询_Php_Mysql_Sql - Fatal编程技术网

Php 在MySQL中选择两个表中的查询

Php 在MySQL中选择两个表中的查询,php,mysql,sql,Php,Mysql,Sql,我正在运行此查询 select * from user_meta JOIN user ON user_meta.userid=user.userid where user_meta.userid=9 但这并不是我想要的结果,而是返回多行 我的一个表看起来像这个名称user\u meta: umeta_id userid meta_key meta_value 1 9 mobile 123324 2

我正在运行此查询

select * from user_meta JOIN user ON user_meta.userid=user.userid where user_meta.userid=9
但这并不是我想要的结果,而是返回多行

我的一个表看起来像这个名称
user\u meta

umeta_id     userid      meta_key       meta_value
 1              9         mobile        123324
 2              9         address       some address
 3              9         city          some city
 4              9         country       some country
 5              9         occupation    some details
 6              9         website       someurl
 7              9         mobile        123324
 8              9         address       some address
 9              9         city          some city
 10             10        country       some country
 11             10        occupation    some details
 12             10        website       someurl
另一个表类似于此名称
user

userid          username      fullname      email              role
  9             someuser       john Doe    123324@gmail.com    admin
如何让它选择查询,以便可以从两个表中提取与
userid 9
相关的所有值,并使其看起来像这样

所需输出:

userid          username      fullname      email              role      Mobile     address     city     country    occupation     website
  9             someuser       john Doe    123324@gmail.com    admin    123123     someaddres    Somecity    somecountry    some details    someurl
谢谢大家!!(提前!)

以上回答是关于您最初的要求。但是根据你的新要求,它不能用简单的查询来完成,它需要是动态的,在这里我为你创建了演示,你可以使用这个

就这么简单:

select * from user_meta, user where user_meta.userid=9 
and user_meta.userid=user.userid

将其简化为一行的唯一实际方法是使用聚合函数

例如,将字段中的详细信息分组

SELECT user.userid, user.username, user.fullname, user.email, user.role, GROUP_CONCAT(CONCAT_WS('-', user_meta.umeta_id, user_meta.meta_key, user_meta.meta_value))
FROM user_meta 
INNER JOIN user ON user_meta.userid=user.userid 
WHERE user_meta.userid=9
GROUP BY user.userid, user.username, user.fullname, user.email, user.role

如果您只想要用户\元表,则所有值都意味着使用此值

select meta.* from user_meta AS meta JOIN user AS us ON meta.userid=us.userid where meta.userid=9
select us.* from user_meta AS meta JOIN user AS us ON meta.userid=us.userid where meta.userid=9
如果只需要用户表,则所有值都意味着使用此选项

select meta.* from user_meta AS meta JOIN user AS us ON meta.userid=us.userid where meta.userid=9
select us.* from user_meta AS meta JOIN user AS us ON meta.userid=us.userid where meta.userid=9
如果你想两种方式都提到像这样

select 
    meta.umeta_id,
    meta.userid, // only one userid is enough
    meta.meta_key,
    meta.meta_value,
    us.username,
    us.fullname,
    us.email,
    us.role from user_meta JOIN
    user ON meta.userid = us.userid
从用户U中选择* 内部连接元用户 在U.userid=M.userid上

其中U.userid=9

为您提供所需的输出(但这是不灵活的,因此如果您添加更多要输出的详细信息,则无法不进行更改):-


您的查询看起来应该返回userid9的所有行(即9行)。你能给出一个你想要它输出什么的例子吗?给出你想要的输出模式吗?检查这个,这可能会帮助你。庆祝一下!EAV数据模型的乐趣!这将返回多行值。我只想要一行。你能发布你想要的输出信息吗,内部连接将执行表连接,并找到所有匹配的连接行。在user_meta中,userid=9有多行,因此它以这种方式返回。还有另一种方法使用GROUP_CONCAT()函数,但这将在一行中使用分隔符对数据进行分隔,例如使用GROUP by的meta_键的mobile、address等。是的,但我需要类似于上面提到的“所需输出”的内容。非常感谢。谢谢你的回复,谢谢!谢谢你的友好回复。你能给我一些与期望输出相关的建议吗?是的,我正在尝试为此创建一个动态查询,请看这里,不确定哪里出了问题,如果有人可以编辑它,这可能会解决问题。应该可以。然而,我认为你的问题是一个非常简单的打字错误。您已经为用户id 1设置了测试数据,但选择了用户id 9,因此没有返回任何记录。请注意,您可以使用我早些时候提出的小组讨论建议来完成这项工作,从您的脚本中提取细节。啊@Kickstart非常感谢它现在起了很大的作用,我很糟糕,我快疯了。这是输出。我使用了这里建议的逻辑,这是一种非常有效的方法,尽管当大多数人看到您的代码时,这会让他们感到困惑!缺点是它有效地进行了两次查询。是的,如果我们真的不知道第二个表中的行数,那么寻找更好的方法。你在回答中提到了这一点。
select 
    meta.umeta_id,
    meta.userid, // only one userid is enough
    meta.meta_key,
    meta.meta_value,
    us.username,
    us.fullname,
    us.email,
    us.role from user_meta JOIN
    user ON meta.userid = us.userid
SELECT user.userid, 
        user.username, 
        user.fullname, 
        user.email, 
        user.role, 
        mobile_meta.meta_value AS `Mobile`, 
        address_metameta_value AS `Address`, 
        city_metameta_value AS `City`, 
        country_metameta_value AS `Country`, 
        occupation_metameta_value AS `Occupation`, 
        website_metameta_value AS `Website`
FROM user
LEFT OUTER JOIN user_meta AS mobile_meta ON mobile_meta.userid=user.userid AND mobile_meta.meta_key = 'mobile'
LEFT OUTER JOIN user_meta AS address_meta ON address_meta.userid=user.userid AND address_meta.meta_key = 'address'
LEFT OUTER JOIN user_meta AS city_meta ON city_meta.userid=user.userid AND city_meta.meta_key = 'city'
LEFT OUTER JOIN user_meta AS country_meta ON country_meta.userid=user.userid AND country_meta.meta_key = 'country'
LEFT OUTER JOIN user_meta AS occupation_meta ON occupation_meta.userid=user.userid AND occupation_meta.meta_key = 'occupation'
LEFT OUTER JOIN user_meta AS website_meta ON website_meta.userid=user.userid AND website_meta.meta_key = 'website'
WHERE user.userid=9