从2个表中获取数据与WHERE clausule的关系

时间:2016-12-15 08:37:42

标签: php twig

我一直在关注PHP身份验证教程,并设法使其正常运行。

现在我想在导航栏中添加一个功能。我会尝试解释,希望有人有答案。

我有2个用户表,用户和user_permissions 在用户表中,还有一些名为<!DOCTYPE html> <html> <body> <?php // set some variables $host = "127.0.0.1"; $port = 5003; // don't timeout! set_time_limit(0); // create socket $socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n"); // bind socket to port $result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n"); // start listening for connections $result = socket_listen($socket, 3) or die("Could not set up socket listener\n"); while(true){ // accept incoming connections // spawn another socket to handle communication $spawn = socket_accept($socket) or die("Could not accept incoming connection\n"); // read client input $input = socket_read($spawn, 1024) or die("Could not read input\n"); // clean up input string $input = trim($input); echo "Client Message : ".$input; // socket_close($spawn); } socket_close($socket); ?> </body> </html> district_iddistrictgemeente_id的列。我在数据库中还有2个名为gemeentedistricten的额外表。

gemeenten表有2个列。 districtenid,其中包含唯一的districtIDname表格至少包含以下3列gemeenteiddistrict_id

以下是我想要发生的事情:

当用户登录查询时,会在导航栏中的gemeente中显示结果,其中将显示用户所拥有的<ul>表中的所有值(列gemeente)被分配到。

示例:

  

用户ZZZ被分配到A区。
  该区域拥有4个城市:城市1,城市2,城市3和城市4   当用户登录时,他应该   只能看到A区的城市。

我不知道如何在Slim2 Framework中使用它并集成在PHP身份验证代码中。所以任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:0)

首先,您必须规范化您的表并清除冗余信息,因为在关系数据库中很难维护它(我假设您使用像MySQL这样的关系数据库)。

所以基本上每个用户都被分配到gemeente,每个分配到区和区的gemeente轮流有城市(gemeenten)。在用户表中,您只需要gemeente_iddistrictengemeente的架构似乎很好。

如何检索所需数据有两种方法:通过运行2个查询(1个用于获取用户区域;第2个用于获取区域&#39;城市)并在一个查询中运行所有内容。选择哪种方式取决于您。

第一种方法:

SELECT d.id FROM district AS d LEFT JOIN gemeente AS g ON g.district_id=d.id LEFT JOIN user AS u ON u.gemeente_id=g.id WHERE u.id=<user_id>

SELECT g.id, g.gemeenten from gemeente as g where g.district_id = <res_of_prev_query>

第二种方法:

SELECT g.id, g.gemeenten FROM gemeente AS g LEFT JOIN districten AS d ON g.district_id=d.id INNER JOIN ( SELECT DISTINCT district_id, u.id AS user_id FROM gemeente as gg INNER JOIN user AS u ON u.gemeente_id=gg.id) AS ud ON ud.district_id=g.district_id WHERE ud.user_id=<user_id>

您需要将此查询转换为ORM / ActiveRecord,运行它并显示ul列表

UPD:我已经更新了我的回答。感谢@DarkBee指出我的错误