PHP 中基于其他查询值的多个查询的结果

问题描述 投票:0回答:1

我有一个 php,它从表单接收一些值作为变量,我使用这些值进行查询并将它们显示在表格中。 PHP 代码是:

 $sql1="SELECT via,codvia,cp,municipio,provincia,( 6371000 * acos(cos(radians($gslat)) * cos(radians(lat)) * cos(radians(lng) - radians($gslng)) + sin(radians($gslat)) * sin(radians(lat)))) AS distancia
FROM $tabla where municipio ='$gsmunicipio' HAVING distancia < 500 ORDER BY distancia";
 
$result = mysqli_query($con, $sql1);
echo "<div class='table-responsive'>";
echo "<table class='table'>
<thead class='thead-dark'>
<tr>
<th scope='col'>Vía</th>
<th scope='col'>CodVia</th>
<th scope='col'>Distancia</th>
</tr>
</thead>
<tbody>";
while ($row = mysqli_fetch_array($result)) {
echo "<tr>";
echo "<td scope='col'>" . $row['via'] . "</td>";
echo "<td scope='col'>" . $row['codvia'] . "</td>";
echo "<td scope='col'>" . $row['distancia'] . "</td>";
echo "</tr>";
}
echo "</tbody></table>";
echo "</div>";

它返回下一个数据:

via                 codvia  distancia   
ANTONIO DE LEYVA        00460   12.20611003690737
SANTA MARIA DE LA CABEZA    01064   230.34840588687064
ANTONIO DE LEYVA        00460   233.86739822576007
MARQUESA DE SILVELA         03899   287.57855871469
DOCTOR CARMENA RUIZ         01727   348.5000437937512
BALEARES            00699   430.2384750664121
ENRIQUE FUENTES         01968   463.78877067869473
SAN MAGIN           05512   479.92500262187957
ALEJANDRO SANCHEZ       00173   495.8582670209417

对于每个 codvia 值,我需要向另一个表(t2)发送查询,以从名为“secc”的列中获取其他值。 mysql 中的查询将是:


SELECT
DISTINCT(secc)
FROM t2
where
cpro=28 and cmum=079 and codvia in (00460,01064,00460,03899,01727,06312,00699,01968,05512,00173); 

返回:

secc
2807911036
2807911037
2807911038
2807911039
2807911034
2807911035
2807911029
2807911024
2807911023
2807911022
2807911010
2807911011
2807911013

对于每个秒,我必须从表“t3”中获取另一个估价器。在mysql中测试的查询y是:

SELECT
Seccs,Total
FROM t3
where cprov=28 and cmun=079 and
Seccs in (2807911036,2807911037,2807911038,2807911039,2807911034,2807911035,2807911029,2807911024,2807911023,2807911022,2807911010,2807911011,2807911013);

并返回:

Seccs       Total   
2807911010  820
2807911011  823
2807911013  1493
2807911022  1538
2807911023  1332
2807911024  1425
2807911029  872
2807911034  1076
2807911035  1217
2807911036  1314
2807911037  1412
2807911038  1114
2807911039  2199

我需要帮助或只在一个查询中进行所有操作并将其放入我的 php 文件中,或者如何在 php 中从第一个结果中显示其他值。

首先,我从第一次查询中收到了 codvia。此 codvia 返回每个通道的秒数,并通过此秒我获得总计值。 我失踪了。

php sql mysql
1个回答
0
投票

我并不是 100% 清楚你的架构到底是什么,但这应该可以帮助你弄清楚。

这个想法是您将需要从中获取数据的表“连接”在一起。也就是说,您在 t1 和 t2 中都有一个 codvia,因此您可以加入其中,以便合并所有结果。然后,您可以对 t2 和 t3 上的 secc 执行相同的操作。您还可以有多个条件来加入(我已从您的示例中添加了 cprov 和 cmum)。

SELECT 
    t1.via,
    t1.codvia,
    t1.cp,
    t1.municipio,
    t1.provincia,
    (6371000 * acos(cos(radians($gslat)) * cos(radians(lat)) * cos(radians(lng) - radians($gslng)) + sin(radians($gslat)) * sin(radians(lat)))) AS distancia,
    t2.secc,
    t3.total
FROM 
    $tabla AS t1
LEFT JOIN
    $tabla2 AS t2
ON
    t2.codvia = t1.codvia
AND
    t2.cprov = 28
AND 
    t2.cmum = 079
LEFT JOIN
    $tabla3 AS t3
ON
    t3.secc = t2.secc
AND
    t3.cprov = t2.cprov
AND 
    t3.cmum = t2.cmum
WHERE 
    municipio ='$gsmunicipio' 
HAVING 
    distancia < 500 
ORDER BY 
    distancia;
© www.soinside.com 2019 - 2024. All rights reserved.