从多个表中使用数组进行MySQL查询(PHP)

时间:2014-11-24 13:02:01

标签: php html mysql

我正在尝试为我的网站实施日志记录系统。我可以轻松地将信息记录到表“LOGS”中,但我想以更“人类可读”的形式向用户呈现。

表LOGS包含log_id, user_id, customer_id, event_id, timestamp等列.User_id指的是表用户,我想从那里使用“用户名”。 Customer_id指的是表客户,我想从那里使用“customername”列值。 Event_id指的是事件表,我想从那里使用“描述”列值。你明白了。

我想在我的网页上打印的内容是这样的:

User John edited customer Wal Mart at 12:25pm
User John viewed customer Burger King at 12:30pm

...。 用户John在下午12:40删除了客户Costco

所以我想从“LOGS”查询20行并使用其他表中的相应值并将其呈现给用户。我可以做基本的查询,但这有点过头了,因为我只是在学习......

感谢您的回答。

编辑:抱歉布局不佳:(

4 个答案:

答案 0 :(得分:1)

这是基本的SQL概念和语法。

查看员工姓名&这个MySql手册页上的工资: JOIN Syntax

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

答案 1 :(得分:1)

使用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'

像这样的东西。但是对于完整的查询,我需要更多关于你想要得到什么以及你的表格的信息。

答案 2 :(得分:1)

您需要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

这将加入logsuserseventscustomers并获取10个结果。如果您想按时间戳或其他方式订购,也可以添加ORDER BY


我倾向于在列名和表名周围使用反引号`来避免保留字的问题。我发现这是一个很好的习惯来阻止自己。 http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html

答案 3 :(得分:1)

所以,你正在学习最好的学习方法:练习,搜索,......祝贺。

您可以使用表格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 JOINRIGHT JOIN个系列。在那种情况下,"外国领域"将具有NULL值。

希望它有所帮助。