【问题标题】:Two JOINS on same table同一张表上的两个 JOINS
【发布时间】:2013-06-10 02:45:48
【问题描述】:

我正在开发一个网站,该网站显示两支球队的足球比分和我的数据库中的两个比分。

这是我的代码:

<?php 
        $result = mysql_query( "SELECT * FROM resultat 
        LEFT JOIN brukere ON resultat.dommer = brukere.id
        INNER JOIN lag ON resultat.lag1 = lag.id
            INNER JOIN lag ON resultat.lag2 = lag.id
        ORDER BY slutt DESC
        " )
        or die("SELECT Error: ".mysql_error());
        $num_rows = mysql_num_rows($result);if ($result) {while ($row = mysql_fetch_array($result)) {
        $_SESSION['id']=$row['id'];
        ?>
        <tr>
                <td><?php echo $row['klubb']; ?></td>
                <td><?php echo $row['klubb']; ?></td>
                <td><?php echo $row['stilling1'] . " - " . $row['stilling2']; ?></td>
                <td><?php echo $row['roed'] . " rødt og " . $row['gult'] . " gult"; ?></td>
                <td><?php echo $row['bane']; ?></td>
                <td><?php echo $row['navn']; ?></td>
            </tr>
        <?php
        }
        }
        ?>

我得到:

SELECT 错误:不是唯一的表/别名:'lag'

当我尝试时:

INNER JOIN lag s ON resultat.lag1 = lag.id
INNER JOIN lag c ON resultat.lag2 = lag.id

我明白了:

SELECT 错误:“on 子句”中的未知列“lag.id”

我该怎么做?来自同一个表的两个连接

【问题讨论】:

标签: php html mysql join


【解决方案1】:

这是一个自联接,您需要在您的表达中使用别名:

     INNER JOIN lag s ON resultat.lag1 = s.id
     INNER JOIN lag c ON resultat.lag2 = c.id 

一般来说,您使用自连接和邻接列表并沿着一个维度遍历树:

    SELECT t1.name AS lev1, t2.name as lev2, t3.name as lev3, t4.name as lev4
    FROM category AS t1
    LEFT JOIN category AS t2 ON t2.parent = t1.category_id
    LEFT JOIN category AS t3 ON t3.parent = t2.category_id
    LEFT JOIN category AS t4 ON t4.parent = t3.category_id
    WHERE t1.parent is NULL 

【讨论】:

    【解决方案2】:

    你可以尝试像这样组合JOIN:

    INNER JOIN lag ON resultat.lag1 = lag.id OR resultat.lag2 = lag.id
    

    如果需要,将 OR 替换为 AND

    【讨论】:

      【解决方案3】:

      您需要使用刚刚为您的表指定的别名lag。你在第一次加入时分配了s,在第二次加入时分配了c,所以你应该使用它们

      INNER JOIN lag s ON resultat.lag1 = s.id
      INNER JOIN lag c ON resultat.lag2 = c.id
      

      【讨论】:

      • 谢谢你,这很好!还有一个问题。我已经设置了它,所以它会回显结果: $row['klubb/name'] 这应该有所不同,现在它显示了两次名称,有什么想法吗?
      • 所以? $row['s.klubb'] 和 $row['c.klubb'] ?
      • 不要只选择*,把所有你需要的列,然后给重复的列一个别名,例如select s.klub as s_klub, c.klub as c_klub....,然后你可以用$row['s_klub']和`$row[ 'c_klub']
      猜你喜欢
      • 2021-09-07
      • 2019-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      • 2012-11-05
      相关资源
      最近更新 更多