【问题标题】:PHP SQL JOIN - Adding secondary Field to resultsPHP SQL JOIN - 将辅助字段添加到结果
【发布时间】:2018-08-10 21:54:40
【问题描述】:

我确定这是一个简单的,但我无法让它工作!

我有一个“会员”表格和一个“交易”表格,并且会员使用相对 ID 与交易相关联。 (成员:trade_id,交易:id)。

我的代码如下,它会拉入特定贸易的成员,并且正在工作,但是我现在在成员表中引入了一个新字段 trade_id2,因此它们可以与多个贸易相关联。

简单地说,如果此页面的 URL 中的 ID 为“1”,我想拉入所有在 trade_id 字段或 trade_id2 字段中具有 1 的成员。

我应该如何将它添加到现有代码中?

$members_sql="SELECT Members.id, Members.display_name, Members.email, Members.phone_1, Members.phone_2, Members.sub_id, Trades.trade FROM Members 
        JOIN Trades ON Members.trade_id=Trades.id 
        WHERE Members.sub_id > 0 AND Members.active = 1 AND Members.trade_id=".$_GET['id']." ORDER BY Members.sub_id DESC, Members.display_name";

【问题讨论】:

    标签: php sql database join mysqli


    【解决方案1】:

    如果您想将会员与多个交易相关联,解决此问题的正确方法是重构您的数据库以定义多对多关系。您必须从Members 表中删除trade_id 字段并定义一个新表(您可以称之为Members_Trade),其中包含trade_idmember_id 字段,每个字段都与对应的表相关联。这样您就可以为每个成员添加任意数量的交易,当然任何交易也可以与多个成员相关联。

    编辑:这是一个带有别名表的 SQL 查询示例:

    $sql = "SELECT m.id, m.display_name, m.email, m.phone_1, n.phone_2, m.sub_id, t1.trade, t2.trade 
        FROM Members m 
        JOIN Trades t1 ON m.trade_id = t1.id 
        JOIN Trades t2 ON m.trade_id = t2.id 
        WHERE m.sub_id > 0 AND m.active = 1 AND (t1.id = $_GET['id'] OR t2.id = $_GET['id'])"
    

    【讨论】:

    • 谢谢 José - 非常感谢。我只会有 2 个交易,所以你知道我如何能够在不重构的情况下提取这些信息吗?
    • 您可以尝试为表格设置别名。请参阅我更新的答案。请记住,这只是一个示例,您不应该直接在引用中使用原始 $_GET 变量,您应该使用参数化查询或首先清理变量。编辑:我已经从这条评论中删除了 SQL 并添加到我的答案中以获得更好的可读性。
    • 谢谢,我在第二次加入时接受它,m.trade_id 应该是 ..trade_id2? (与会员关联的二级贸易字段名称)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多