选择*从内部联接-从两个表中选择

时间:2019-09-20 00:12:48

标签: php mysql sql join

TABLES
***************************************
| events           | attendance       |
***************************************
| event-id         | atd-id           |
| event-name       | event-id         |
| event-date-time  | user-id          |
| event-address    | guests           |
|                  |                  |
***************************************

事件日期时间是(日期时间)格式。

我正在尝试获取用户将参加的所有活动, 并按日期和时间排序。

$sql = "SELECT * 
FROM events, attendance 
WHERE `attendance.event-id` = `events.event-id` 
AND `attendance.user-id` = ".$user-id." ORDER BY `event-date-time` DESC";

显示行:

  • 事件名称,事件地址,事件日期时间
  • 事件名称,事件地址,事件日期时间
  • 事件名称,事件地址,事件日期时间
  • 事件名称,事件地址,事件日期时间
  • ...

我也尝试过:

$sql = "SELECT *
FROM `events` e
INNER JOIN `attendance` a ON a.event-id = e.event-id
ORDER BY `event-date-time` DESC
WHERE a.user-id = ".$user_id;

1 个答案:

答案 0 :(得分:1)

这可能有帮助。

$sql = "SELECT e.*, a.atd-id, a.user-id, a.guests FROM `events` e
  LEFT JOIN `attendance` a ON a.event-id = e.event-id
  WHERE a.user-id = ".$user_id."
  ORDER BY `event-date-time` DESC;

INNER JOIN获取两个表上的公用记录。

LEFT JOIN从另一个具有引用身份的表中获取记录。

在您的情况下,您正在基于引用键event-id将表引用到另一个表,因此必须使用左连接。另外,必须将WHERE子句放在Order By之前。

如果要显示参数,请仍然使用在查询的每个表上声明的别名,因此,请指定名称。