gpt4 book ai didi

php - 循环显示其他表中的值

转载 作者:IT老高 更新时间:2023-10-28 23:53:11 25 4
gpt4 key购买 nike

在我的数据库中,我有 3 个表:

train_information:

+----------+-----------------+------------------+
| train_id | number_of_axles | number_of_bogies |
+----------+-----------------+------------------+
| 1 | 4 | 2 |
+----------+-----------------+------------------+

车轴:

+---------+----------+------+----------+
| axle_id | train_id | axle | distance |
+---------+----------+------+----------+
| 1 | 1 | 1 | 2500 |
| 2 | 1 | 2 | 5000 |
| 3 | 1 | 3 | 2500 |
+---------+----------+------+----------+

转向架:

+----------+----------+---------+----------+
| bogie_id | train_id | axle_nr | bogie_nr |
+----------+----------+---------+----------+
| 1 | 1 | 1 | 1 |
| 2 | 1 | 2 | 1 |
| 3 | 1 | 3 | 2 |
| 4 | 1 | 4 | 2 |
+----------+----------+---------+----------+

train_information 表中插入某些内容时,触发器也会插入其他 2 个表中(距离和 bogie_nr 稍后会更新,但在本示例中,所有内容都已填写)。

现在我根据 distance & axis 值制作火车模型。现在它看起来像这样:

<div id="axles">
<!--This is the last (useless) axle, which always is 0-->
<div id="useless_circle"></div>
<!--Here we create the axles and style them with the distances-->
<?php
$show_axle = $database->axles($_GET['train_id']);
$total_distance = 0;
foreach($show_axle as $number_ofaxles){
$total_distance += $number_ofaxles['distance']; ?>
<div id="axle" name="test" style="margin-left:<?= $total_distance/25000*100;?>%">
<?= "<div id='circle'>" . $number_ofaxles['axle'] . "</div>";?>
</div>
<?php } ?>
</div>

还有:

function axles($id){
$sql = "SELECT * FROM axle WHERE train_id = :id2";
$sth = $this->pdo->prepare($sql);
$sth->bindParam(":id2", $id, PDO::PARAM_STR);
$sth->execute();
return $sth->fetchAll();
}

现在,页面看起来像这样(带有 DB 的值):

How the page looks.

我提供的代码仅适用于车轴! (火车下面的 4 个圆圈)!

现在,我想要什么:

现在,我只是询问轴表的值(value)。但它只包含 3 个轴而不是 4 个。这是因为我想知道每个轴之间的距离。所以我总是需要少 1 个。
我通过制作 1 个额外的 div 来解决这个问题,该 div 创建了圆圈(轴)并且位置在左侧。

我想要的是这样的:显示 bogie 表中的 axle_nr(因此显示为 4)。获取 distance 其中 axle = axle_nr
然后你总是保持 1 为空。因为轴 4. 在 axle 表中不存在。所以我想检查一下:如果轴不存在,那么距离 = 0。我不想将它插入数据库中,但是这样我就不再需要无用的轴 div 并且轴保持在左侧.

我为什么要这个?
这样我可以检查哪些转向架编号是相同的,所以我可以给它们另一种颜色等。而且我不需要 useless_axle div!

编辑:

简单解释:

我想显示 bogie 表中的 Axle_nr。 (所以它显示4个圆圈)然而!我需要 axle 表中的 Distance 来制作火车图。
如您所见,axle 工作台的车轴比 bogie 工作台少 1 个。
所以我希望“不存在”轴的值为 0。我希望它为 0,因为这样它就会出现在火车的开头。 (就像现在没用的车轴)

代码编辑:

现在我得到了这个:

   <div id="axles">
<?php
$testingggg = $database->axleees();
foreach ($testingggg as $lol){ ?>
<div id="axle">
<div id="circle" name="<?= $lol['axle'] ?>"><?= $lol['axle'] ?></div>
</div>
<?php } ?>
</div>

还有:


function axleees() {
$sql = "SELECT ti.axle_nr, ti.train_id, ti.bogie_nr, uti.axle_id, uti.train_id, uti.axle, uti.distance
FROM bogie as ti
JOIN axle as uti
ON ti.train_id = uti.train_id
WHERE ti.train_id = :train_id";
$sth = $this->pdo->prepare($sql);
$sth->bindParam(":train_id", $_GET["train_id"], PDO::PARAM_INT);
$sth->execute();
return $sth->fetchAll();
}

它显示了 12 个轴而不是 4 个轴!

编辑:

它现在显示 4 个轴,这是正确的。但是我也需要正确的距离。我的代码:

    <div id="axles">
<?php
$total_distance = 0;
foreach ($testingggg as $lol){
$total_distance += $lol['distance'];
?>
<div id="axle" style="margin-left:<?= $total_distance/25000*100;?>%">
<div id="circle" name="<?= $lol['axle'] ?>"><?= $lol['axle_nr'] ?></div>
</div>
<?php } ?>
</div>

现在,它告诉我每个车轴都有 10% 的余量。这是正确的(如果您只有第一个轴)。它需要像 10-15-10-15 左右。我该怎么做?

编辑:

现在我有以下查询:

function axleees() {
$sql = "SELECT ti.axle_nr, ti.train_id, ti.bogie_nr, uti.axle_id, uti.train_id, uti.axle, uti.distance
FROM bogie as ti
JOIN axle as uti
ON ti.train_id = uti.train_id
WHERE ti.train_id = :train_id
GROUP BY uti.axle_id";
$sth = $this->pdo->prepare($sql);
$sth->bindParam(":train_id", $_GET["train_id"], PDO::PARAM_INT);
$sth->execute();
return $sth->fetchAll();
}

我在这里称它为:

<div id="axles">
<?php
$total_distance = 0;
foreach ($testingggg as $lol){
$total_distance += $lol['distance'];
$margin = $total_distance/25000*100;
?>
<div id="axle" style="margin-left:<?= $margin; ?>%">
<div id="circle" name="<?= $lol['axle'] ?>"><?= $lol['axle_nr'] ?></div>
</div>
<?php } ?>
</div>

图片编辑:

train example

最佳答案

在我看来,这是解决原始问题的一种相当复杂的方法。你害羞了一个轴,需要那个轴在你的数据库中。您说过所有值都是通过数据库中的触发器添加的。如果是这样,为什么不添加一个距离为“0”的值与火车的 ID。这不仅会为您提供轴,还会为您提供呈现的 div。

如果你的表在生成后看起来像这样(如果索引方向错误,请原谅我。我正在努力理解你的数据库布局):

+---------+----------+------+----------+
| axle_id | train_id | axle | distance |
+---------+----------+------+----------+
| 0 | 1 | 0 | 0 |
| 1 | 1 | 1 | 2500 |
| 2 | 1 | 2 | 5000 |
| 3 | 1 | 3 | 2500 |
+---------+----------+------+----------+

然后下面的代码将生成所有圆圈,包括边距(或如您之前所述的距离)为“0”的圆圈。从技术上讲,您的车轴与火车前部的距离为“0”,那么为什么不在您的数据库中跟踪它。

<div id="axles">
<!--Here we create the axles and style them with the distances-->
<?php
$show_axle = $database->axles($_GET['train_id']);
$total_distance = 0;
foreach($show_axle as $number_ofaxles){
// Because the first value is 0, the first run will be against the left edge.
$total_distance += $number_ofaxles['distance']; ?>
<div id="axle" name="test" style="margin-left:<?=$total_distance/25000*100;?>%">
<?= "<div id='circle'>" . $number_ofaxles['axle'] . "</div>";?>
</div>
<?php } ?>
</div>

采用这种方法可以简化并解决您的问题。

关于php - 循环显示其他表中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30503123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com