Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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
Mysql 整理两个表中的数据_Mysql_Sql - Fatal编程技术网

Mysql 整理两个表中的数据

Mysql 整理两个表中的数据,mysql,sql,Mysql,Sql,我使用下面的语句来尝试正确地收集和显示数据。有必要使用一个表来“左连接”以收集更多信息,但我应该说,对于第二种情况,没有必要这样做(但这就是我的工作) 在我上面的查询中,我想使用通配符值 LEFT JOIN cu_building AS building ON ('39' = building.id) 下面是我的位置表的外观。我试图使用params列中的数据从另一个表(building)中获取结果campus)。我只需要对包含building\u id标记的字段执行此操作,而不需要对

我使用下面的语句来尝试正确地收集和显示数据。有必要使用一个表来“左连接”以收集更多信息,但我应该说,对于第二种情况,没有必要这样做(但这就是我的工作)

在我上面的查询中,我想使用通配符值

LEFT JOIN cu_building AS building ON
    ('39' = building.id) 
下面是我的
位置
表的外观。我试图使用
params
列中的数据从另一个表(
building
)中获取结果
campus
)。我只需要对包含
building\u id
标记的字段执行此操作,而不需要对那些具有“campus\u id”的字段执行此操作,因为这是已知的

-----------------------------
 member_id  | params  
-----------------------------
 1          | building_id=39
 2          | building_id=24
 3          | campus_id=6
 4          | campus_id=3
 5          | building_id=11
 6          | campus_id=14
 7          | building_id=15
这就是我的
建筑
表格的外观。它列出了哪个建筑是哪个校园的一部分

--------------------------
 building_id  | campus_id 
--------------------------
 39           | 5
 24           | 4
 11           | 2
 15           | 2
我还有一张桌子叫“校园”。我的问题是,这个表只列出了数据,但我希望使用这个表来显示最终结果中的正确数据

--------------------------
 campus_id   | name 
--------------------------
 6           | ...
 3           | ..
 14          | .
我希望通过MySQL查询实现的结果如下。这里,收集的结果显示在一个表中

-----------------------------
 member_id  | campus  
-----------------------------
 1          | 5                      (building_id=39)
 2          | 4                      (building_id=24)
 3          | 6                      (campus_id=6)
 4          | 3                      (campus_id=3)
 5          | 2                      (building_id=11)
 6          | 14                     (campus_id=14)
 7          | 2                      (building_id=15)

第一件事您确实需要修改数据库结构。该位置表将给您带来无限多的问题,使您需要将成员与建筑物和校园连接起来的每个查询都变得复杂。根据显示的数据,您确实应该在成员表上有building_id和campus_id。另一个更软的解决方案是在location表中有一个building_id和一个campus_id列

这就是说,您既不需要正则表达式,也不喜欢使用此查询。像这样的事情应该能正常工作:

SELECT
  COALESCE(b.campus_id, c.id) AS campus 
  m.*
FROM      cu_member   m
JOIN      location    l ON l.member_id = m.member_id
LEFT JOIN cu_building b ON l.params = CONCAT('building_id=',b.id)
LEFT JOIN cu_campus   c ON l.params = CONCAT('campus_id=',c.id)

我可以看出,最后一次加入似乎有点多余,因为您实际上只需要校园id,而不需要名称或其他信息。它已经驻留在位置表中,因此似乎没有必要加入校园表。问题是它被嵌入到params列中。在您提供的示例中,最好将params列扩展为building\u id和campus\u id列

加入这一过程变得非常容易

SELECT
    COALESCE(building.campus_id, campus.campus_id) AS campus 
    member.*
FROM location
LEFT JOIN cu_member AS member ON     (member.member_id = location.member_id)
LEFT JOIN cu_building AS building ON (location.building_id = building.building_id) 
LEFT JOIN cu_campus AS campus ON     (location.campus_id = campus.campus_id)

如果有其他原因使得创建单独的列变得困难,那么使用@Frazz提供的代码,您的
params
列在
location
表中是令人讨厌的。不要在内容中加入隐含的意思。我错了。我的
campus
表只有一列ID。其余的列是多余的。我的意图是让这个表有一个左连接,其唯一目的是显示该ID(其中
campus\u ID=
出现在第一个表的
parameters
列中)。需要修改(或完全删除)位置表结构,但这可能是不可能的。您尝试的查询没有什么意义。为什么从成员表的左联接中的位置表开始?您没有从位置选择任何内容。。。此联接将拉入似乎无用的空行。你到底想做什么?
SELECT
    COALESCE(building.campus_id, campus.campus_id) AS campus 
    member.*
FROM location
LEFT JOIN cu_member AS member ON     (member.member_id = location.member_id)
LEFT JOIN cu_building AS building ON (location.building_id = building.building_id) 
LEFT JOIN cu_campus AS campus ON     (location.campus_id = campus.campus_id)