mysql查询在两个不同的表中以id形式获取项

kx7yvsdv  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(349)

很抱歉我的英语不好,但这是我能做到的最好的了。
我正在尝试制作一个脚本,以获取我的

对于这个例子,我将使用id为2的行。
第一个查询工作正常,得到 1items 以及 2items 并删除 ; 随之而来的。
但第二部分似乎有点难,我解决不了。查询正在获取 id, base_item 从table上

最后两个标记为红色的输出是匹配的输出 1items & 2items 我试图让if语句在item表中过滤$item1as id,并输出找到的行的baseitem
第2项也是如此

我使用mysql和mysqli是因为这个cms还不支持php的更新版本。

<?php
 $query = "SELECT * FROM logs_client_trade ORDER by id DESC";
 $result = mysql_query($query) or die(mysql_error());
 while($row = mysql_fetch_array($result)){

     $item1 = rtrim($row['1items'],"; ");
     $item2 = rtrim($row['2items'],"; ");

     echo("<tr>");
     echo("<td>" . $row['id'] . "</td>");
     echo("<td>" . $row['1id'] . "</td>");
     echo("<td>" . $row['2id'] . "</td>");

    $userinfo = "SELECT id, base_item FROM items LIMIT 1";
    $result2 = mysql_query($userinfo) or die(mysql_error());
        while($row2 = mysql_fetch_assoc($result2)){
            echo("<td>");
                if($row2['id'] == $item1){ echo $row2['baseitem']; } else echo "Not available";
            echo ("</td>");
            echo("<td>");
                if($row2['id'] == $item1){ echo $row2['baseitem']; } else echo "Not available";
            echo ("</td>");
        }
    $tradetime = $row['timestamp'];
    $date = date("d M Y - H:i:s", $tradetime);
    echo("<td>$date</td></tr>");
 }
?>
1wnzp6jl

1wnzp6jl1#

您可以使用联接通过一条sql语句获取所有信息:

SELECT * 
FROM `logs_client_trade` a
LEFT JOIN `items` b
ON REPLACE(a.`1items`,';','') = b.`id`
LEFT JOIN `items` c
ON REPLACE(a.`2items`,';','') = c.`id`
ORDER by a.`id` DESC

更新:
下面是运行查询并输出表行的php代码。我已经根据原始问题中的代码指定了列名。

<?php

$query = "SELECT
    a.`id`,
    a.`1id`,
    a.`2id`,
    a.`1items`,
    a.`1items`,
    IFNULL(b.`baseitem`,'Not Available') as `baseitem1`,
    IFNULL(c.`baseitem`,'Not Available') as `baseitem2`,
    DATE_FORMAT(a.`timestamp`,'%d %m %Y - %H:%i:%s') as `tradetime`
FROM `logs_client_trade` a
LEFT JOIN `items` b
ON REPLACE(a.`1items`,';','') = b.`id`
LEFT JOIN `items` c
ON REPLACE(a.`2items`,';','') = c.`id`
ORDER by a.`id` DESC
";
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array($result)){

    $item1 = rtrim($row['1items'],"; ");
    $item2 = rtrim($row['2items'],"; ");

    echo "<tr>\r\n";
    echo "  <td>" . $row['id'] . "</td>\r\n";
    echo "  <td>" . $row['1id'] . "</td>\r\n";
    echo "  <td>" . $row['2id'] . "</td>\r\n";
    echo "  <td>" . $row['baseitem1'] . "</td>\r\n";
    echo "  <td>" . $row['baseitem2'] . "</td>\r\n";
    echo "  <td>" . $row['tradetime'] . "</td>\r\n";
    echo("</tr>\r\n");
}
?>
myss37ts

myss37ts2#

您忘记了第二个查询的while循环:

$userinfo = mysql_query("SELECT id, base_item FROM items");
while($get2 = $userinfo->fetch_assoc()) {
    $baseid = $get2['id'];
    $baseitem = $get2['baseitem'];

    echo("<tr>");
    [...]
}

除此之外,你的代码也是一团糟。在第二个循环中,您仍在列出logs表中的行。。。我建议您仔细检查代码,注意如何使用不同的$row和$get2数组。

相关问题