【问题标题】:MySQL query from multiple tables with an array (PHP)使用数组(PHP)从多个表中查询 MySQL
【发布时间】:2014-11-24 23:23:11
【问题描述】:

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

Table 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 pm 删除了客户 Costco

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

感谢您的回答。

编辑:很抱歉布局不佳:(

【问题讨论】:

    标签: php html mysql


    【解决方案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 值。

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

      这是基本的 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
      

      【讨论】:

        【解决方案3】:

        使用连接 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 子句在 WHERE 子句之前。
        【解决方案4】:

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

        【讨论】:

        • 谢谢,知道自己在做什么就很容易了。
        • @JouniLahtinen 如果你不知道,在 Stack Overflow 上变得更聪明很容易:-) 请记住接受答案。
        猜你喜欢
        • 2020-11-14
        • 1970-01-01
        • 1970-01-01
        • 2015-04-30
        • 2017-02-18
        • 2018-02-15
        • 2017-04-30
        • 2010-11-26
        • 1970-01-01
        相关资源
        最近更新 更多