[英]MySQL query from multiple tables with an array (PHP)
我正在尝试对我的站点实施日志记录系统。 我可以轻松地将信息记录到“ LOGS”表中,但我想以更“易于阅读”的形式向用户展示。
表LOGS包含诸如log_id, user_id, customer_id, event_id, timestamp
等列。User_id指的是表用户,我想从那里使用“用户名”。 Customer_id指的是表客户,我想从那里使用“ customername”列值。 Event_id引用事件表,我想从那里使用“ description”列值。 你明白了。
我想打印到网页上的内容是这样的:
User John edited customer Wal Mart at 12:25pm
User John viewed customer Burger King at 12:30pm
...。 John用户在12:40 pm删除了客户Costco
因此,我想从“ LOGS”中查询20行,并使用其他表中的相应值并将其呈现给用户。 我可以进行基本查询,但这有点麻烦,因为我只是在学习……
感谢您的回答。
编辑:对不起糟糕的布局:(
这是基本的SQL概念和语法。
在此MySql手册页上查看员工姓名和工资: JOIN语法
select
log_id,
customer_name,
user_name
from
logs
inner join customers on customers.customer_id = logs.customer_id
inner join users on users.user_id = logs.user_id
使用join sql命令:
SELECT a.*, b.username,c.customername,d.description
FROM logs a
INNER JOIN customers b
ON a.user_id=b.username
INNER JOIN events c
ON a.event_id=c.customerID
WHERE a.user_id = '$userID'
这样的事情。 但是对于完整查询,我需要有关您想要获得的内容以及表的外观的更多信息。
您需要JOIN
两个表。 这是一个例子:
SELECT
`logs`.*,
`users`.`username`,
`events`.`description`,
`customers`.`customername`
FROM
`logs`
JOIN
`users`
ON `users`.`id` = `logs`.`user_id`
JOIN
`events`
ON `events`.`id` = `logs`.`event_id`
JOIN
`customers`
ON `customers`.`id` = `logs`.`customer_id`
LIMIT 10
这将加入logs
, users
, events
和customers
并获取10个结果。 如果要按时间戳或其他方式订购,也可以添加ORDER BY
。
我倾向于在列名和表名周围使用反引号`
来避免保留字的问题。 我发现这是一个坚持自己的好习惯。 http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html
因此,您正在遵循最好的学习方法:练习,搜索,...恭喜。
您的要求可以通过表JOIN
来实现。 例:
SELECT u.username, c.customername, e.description, l.timestamp
FROM logs AS l #Using aliases to avoid long names
JOIN users AS u ON l.user_id = u.id #The JOIN condition : basically, foreign
#key equal to foreign table primary key
JOIN customers AS c ON l.customer_id = c.id
JOIN events AS e ON l.event_id = e.id
#YOUR ORDER Clause
LIMIT 20
请注意,如果任何外键字段是可选的(可以为NULL),则应使用LEFT JOIN
或RIGHT JOIN
系列。 在这种情况下,“外部字段”将具有NULL值。
希望能帮助到你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.