从2个不同的表中选择并显示记录

时间:2015-02-08 18:22:39

标签: php mysql

我正在使用php和mysql制作预订系统。该系统将涉及从mysql检索不同用户的预订记录。我目前在选择不同用户的预订时遇到困难。我想根据用户登录选择记录。我使用下面的代码,它应该从表预订和用户会话中选择记录。但是,此代码不显示任何预订。

$sqlquery = "SELECT * FROM bookings,users where users.id=  ".$_SESSION['loggedInUser']."";

$results = $mysqli->query($sqlquery);

我一直面对这个问题,我真的想选择用户登录的预订。

2 个答案:

答案 0 :(得分:0)

您需要一个数据透视表来将用户与预订相关联:

CREATE TABLE user_bookings (id int PRIMARY KEY AUTO_INCREMENT, booking_id int, user_id int);

我通常最终会使用两个查询,因为它可以更好地构建数据。根据您的网站/应用程序的大小,您可以使用对象关系映射器,因为它可以在内部为您处理数据映射。

如果您只需要预订,您只需从数据透视表中选择并加入像这样的预订

$bookingsql = "SELECT * FROM user_bookings JOIN bookings on bookings.id =  user_bookings.booking_id where user_bookings.user_id =" . $_SESSION['loggedInUser'];

如果您还需要用户详细信息,则可以先选择用户,然后运行$bookingsql查询以获取预订详细信息。

$usersql = "SELECT * FROM users where id= " . $_SESSION['loggedInUser'];

然后,根据您使用的框架/数据库驱动程序,将$usersql查询结果转换为名为$user的数组,并使用{{1}的结果为其分配预订查询。

这也可以通过子查询实现,请参阅this question作为示例,但请将产品视为您的用户,将类别视为您的预订。

答案 1 :(得分:-1)

要选择已登录用户进行的预订:您应该尝试INNER JOIN

$sqlquery = "SELECT b.* FROM bookings b
 INNER JOIN users u ON u.id_user = b.user_id
 WHERE u.id_user= ".$_SESSION['loggedInUser'];