如何从每行不同列中的行中检索多个数据

时间:2019-09-13 20:18:52

标签: php mysql sql database

我想从特定的行中检索一些数据,但是我不知道数据在哪一列。 例如。

       col1 col2 col3 col4 col5 col6
row1   A      B    C     D    E    F
row2   H      B    G     E    I    J

现在我需要数据B和G,它在row1和row2中,并且我需要在运行命令时像B C D E那样取出值。

很可能使我能够思考应该为它编写什么好的代码。

预期输出

B C D E    from row1
B G E      from row2

enter image description here

这是实际数据 我需要在GTB和Sion之间调用数据的地方 有两行提供GTB和SION 但是它们都在不同的列中

SELECT __________  
FROM `busroute` 
WHERE 'GTB' IN (Source,Stop2,Stop3,Stop4,Stop5,Stop6,Stop7,Stop8,Stop9,Destination)
AND 'Wadala' IN  (Source,Stop2,Stop3,Stop4,Stop5,Stop6,Stop7,Stop8,Stop9,Destination);

输出应为:

ROW1   -   Sion Koliwada GTB
ROW2   -    Sion SionCircle Koliwada GTB

1 个答案:

答案 0 :(得分:1)

这可能不是最佳方法,但是您可以按照以下方式获得答案:

  • 在这里顺序很重要,您必须将这两个变量视为源和目标。
  • 这里Sion是源,GTB是目的地。如果您不同,则将源值替换为Sion的所有值,将目标值替换为GTB的所有值。
  • 如果一个站具有代表另一个站的子字符串,则使用
  • --符号来区分两个站。像Sion Circle具有Sion作为代表另一个站点的子字符串。

逻辑

  • 任何目的地的任何路线均应存在两个站点。因此,我们为所有输入WHERE使用了IN子句和stops运算符的两个输入。

  • CONCAT_WS('--', '--', Source,Stop2,Stop3,Stop4,...,Destination, '--')它创建由--分隔的所有电台的列表,并在两端添加--。例如--A--B--C--D--

  • 为什么添加--,所以我们可以对一个站点进行完整的精确搜索,以使其不会与其他站点重叠。

Example: if I have to search 'Sion' then search will be `--Sion--`

 --Sion--Sion Circle--BC   : Return true
 --Sion Circle--BC--AKDKJ--: return false, simple search would have return true.
  • SUBSTRING_INDEX用于根据来源或目的地删除路线的不必要的左右部分
  • 再次将源和目的地添加到新生成的路线中以显示完整的路线。
  • 最后删除所有为计算目的添加的--

查询

SELECT
    b.RouteID,
    b.BusNo,
    REPLACE(CONCAT_WS(' ', 'Sion', SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT_WS('--', '--', Source,Stop2,Stop3,Stop4,Stop5,Stop6,Stop7,Stop8,Stop9,Destination, '--'), '--Sion--', -1), '--GTB--', 1),'GTB'),'--', ' ') as route
FROM busroute b
WHERE 'GTB' IN (Source,Stop2,Stop3,Stop4,Stop5,Stop6,Stop7,Stop8,Stop9,Destination)
AND 'Sion' IN  (Source,Stop2,Stop3,Stop4,Stop5,Stop6,Stop7,Stop8,Stop9,Destination);