Php Mysql查询在两个不同的表中以ID形式获取项
很抱歉我的英语不好,但这是我能做到的最好的了 我正在尝试制作一个脚本,以获取我的 对于本例,我将使用ID为2的行 第一个查询工作正常,获得了Php Mysql查询在两个不同的表中以ID形式获取项,php,mysql,mysqli,Php,Mysql,Mysqli,很抱歉我的英语不好,但这是我能做到的最好的了 我正在尝试制作一个脚本,以获取我的 对于本例,我将使用ID为2的行 第一个查询工作正常,获得了1items和2items的两个值,并删除了随附 但第二部分似乎有点难,我解决不了。 查询正在从表中获取id,base\u item 标记为红色的最后两个输出是匹配1项和2项的输出 我试图让if语句将item表中的$item1过滤为id,并输出找到的行的baseitem 第2项也是如此 我正在使用MySQL和MySQLi,因为这个cms还不支持更新版本
1items
和2items
的两个值,并删除了代码>随附
但第二部分似乎有点难,我解决不了。
查询正在从表中获取id,base\u item
标记为红色的最后两个输出是匹配1项和2项的输出
我试图让if语句将item表中的$item1过滤为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>");
}
?>
您忘记了第二个查询的while循环:
$userinfo = mysql_query("SELECT id, base_item FROM items");
while($get2 = $userinfo->fetch_assoc()) {
$baseid = $get2['id'];
$baseitem = $get2['baseitem'];
echo("<tr>");
[...]
}
$userinfo=mysql\u查询(“从项目中选择id、基本项目”);
而($get2=$userinfo->fetch_assoc()){
$baseid=$get2['id'];
$baseitem=$get2['baseitem'];
回声(“”);
[...]
}
除此之外,你的代码也是一团糟。在第二个循环中,您仍然在列出logs表中的行。。。我建议您仔细检查代码,注意如何使用不同的$row和$get2数组。您可以使用一条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");
}
?>
您是否忘记了第二个查询的while()?$get2包含一个数组,但您试图访问它,就好像它只是一个简单数组。您的第二次查询没有指定where子句来从items表中获取匹配行。@Sloachr第二次查询需要2行具有2个不同id的行,我无法让它处理item1和2,直到除了不可用之外没有输出。我仍然需要2个项,因为我需要这两个项项目表中两行的值我从不使用这个,因为我不知道如何回显它你在开玩笑吧?一次循环行,只需回显查询中的列。查看我的更新答案。它包含用于回显查询结果的PHP代码。