Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用2个PHP表从一个SELECT sql查询中检索2行_Php_Sql_Select_Union - Fatal编程技术网

使用2个PHP表从一个SELECT sql查询中检索2行

使用2个PHP表从一个SELECT sql查询中检索2行,php,sql,select,union,Php,Sql,Select,Union,我有两张表来计算一个简单的距离公式 我需要在orders表中为ORDER_ID返回两行(带距离值) 我得到的结果顺序是:id=2,pickupfromdistance=43,dropoffto=99 我从这个网站上尝试了一些想法,这里是我的一些想法,几乎有效,但不返回第二个距离值。我走错方向了吗?我是在为一个简单的问题制定一个复杂的解决方案吗 QUOTES TABLE ----------------- QUOTE_ID_PK PICKUP_FROM_ID DROPOFF_TO_ID 1

我有两张表来计算一个简单的距离公式

我需要在orders表中为ORDER_ID返回两行(带距离值)

我得到的结果顺序是:id=2,pickupfromdistance=43,dropoffto=99

我从这个网站上尝试了一些想法,这里是我的一些想法,几乎有效,但不返回第二个距离值。我走错方向了吗?我是在为一个简单的问题制定一个复杂的解决方案吗

QUOTES TABLE
-----------------
QUOTE_ID_PK  PICKUP_FROM_ID  DROPOFF_TO_ID
1               4                     3
2               2                     3
3               1                     1
4               1                     2
5               3                     2


TOWN TABLE
---------------
 TOWN_ID_PK  DISTANCE    NAME
    1        34          South Central 
    2        43          airport
    3        99          bus station
    4        66          train station
例如。 我选择:

SELECT town.town_id_pk AS townID, town.distance AS distance, town.name AS townName, town.location AS location, quotes.pickupfrom_id, quotes.dropoffto_id 
FROM town, quotes 
WHERE quotes.pickupfrom_id=town.town_id_pk 
AND quotes.quote_id_pk = '140419420'
UNION ALL
SELECT town.town_id_pk AS townID, town.distance AS distance, town.name AS townName, town.location AS location, quotes.pickupfrom_id, quotes.dropoffto_id
FROM town, quotes 
WHERE quotes.dropoffto_id=town.town_id_pk 
AND quotes.quote_id_pk = '140419420'";
(具有从_ID=2的拾取_和从_ID=3的衰减_)

我想要的结果是这样的:

QUOTE_ID_PK=2, wh
那么下一排就是

TOWN_ID_PK=2, DISTANCE=43, NAME=AIRPORT
一旦我知道哪一段距离更远,我就可以继续使用代码计算每公里的费率等(我可以自己计算这一部分)。

只是给一个提示:

TOWN_ID_PK=3, DISTANCE=99, NAME= BUS STATION
这里有一个

编辑:

要获得两行,请尝试以下操作:

SELECT 
  ORDER_ID, 
  PICKUP_FROM_TOWN_ID, 
  (SELECT DISTANCE FROM TOWN  where TOWN_ID_PK = quotes.DROPOFF_TO_ID) as DISTANCE, 
  quotes.DROPOFF_TO_ID  
from town, quotes 
WHERE quotes.PICKUP_FROM_TOWN_ID=town.TOWN_ID_PK
AND ORDER_ID = '140419420'

新的

你只是想知道这两个城镇的距离吗?如果是这样,您可以使用
join

SELECT 
  ORDER_ID, 
  PICKUP_FROM_TOWN_ID, 
  DISTANCE,
  DROPOFF_TO_ID  
from town, quotes 
WHERE 
    ( quotes.PICKUP_FROM_TOWN_ID=town.TOWN_ID_PK or quotes.DROPOFF_TO_ID=town.TOWN_ID_PK )
AND ORDER_ID = 2

1) 学会使用连接2)只有在拾取和衰减与基点完全相反时,距离才有意义QUOTE_id_pk未在quotes表中列出。你能列出表格的完整结构(或至少所有相关列)吗?哇,谢谢你们的快速响应。实际的表格比我上面制作的示例表格有更多的信息。是的,马克,我明白你的意思。我有一个城镇作为“基地镇”,然后其他城镇作为“距离基地”。。。因此,当用户输入从a镇到B镇的搜索时,sql将查找数据库,检查其中一个镇是否为基地镇,然后根据最长距离计算出距离和成本。在上面显示quote_id_pk joseph的表格中修复。您原来的UNION ALL方法似乎运行良好。看到这把小提琴-请确保quote_id_pk是varchar(因为您已经用单引号括起来了140419420)。理想情况下,我希望看到结果中的另一行显示ORDERID=4、DROPOFF_to_id=2和DISTANCE=43再次感谢阿克塞尔,还有一个问题,我如何区分返回的“距离”之间的差异?例如距离A=43,距离B=99Array([quote_id_pk]=>140419432[pickupfrom_id]=>3[DISTANCE]=>1[dropoffto_id]=>12)Array([quote_id_pk]=>140419432[pickupfrom_id]=>3[DISTANCE]=>127[dropoffto_id]=>12)这是我使用Axel的答案从我的数据库中得到的结果,它正在工作,但是我如何将$distance1和$distance2设置为两个距离结果?还不清楚您想要实现什么。例如,“下车城市”的“距离”为43-到什么??见上述评论。理想情况下,您需要一个表格,其中列出了只有一个距离的所有接送和接送迭代尝试获得两个城镇的两个距离,然后计算出哪一个距离最远,以计算每个城镇的费率kilometre@user3556674 . . . 这似乎与最初描述的问题相去甚远。我建议你删除这个问题,再问另一个问题。包括示例数据、您想要的结果以及对实际问题的解释。仅仅修改这个问题对那些已经尝试回答它的人来说是不公平的。对不起,戈登,这是我第一次用stackoverflow提问。我已经用我正在尝试做的事情更新了这个问题。例如,我选择QUOTE_ID_PK=2,wh(从_ID=2取车,从_ID=3取车)之后的结果是这样的:TOWN_ID_PK=2,DISTANCE=43,NAME=AIRPORT然后下一行是TOWN_ID_PK=3,DISTANCE=99,NAME=BUS STATION
select oq.*, tfrom.distance as distance_from, tto.distance as to_distance
from OrderQuotes oq left outer join
     Towns tfrom
     on oq.PICKUP_FROM_TOWN_ID = tfrom.town_id_pk left outer join
     Towns tto
     on oq.PICKUP_TO_TOWN_ID = tto.town_id_pk;