如何通过使用某些连接或其他查询来检索所需的数据/结果?

时间:2014-04-01 18:01:58

标签: php mysql

我遇到了在php / mysql中获取所需结果的问题。我正在寻求你的帮助以解决它。

这是我的问题 -

我有两张桌子

  1. new_equipment

  2. new_equipment_trims

  3. new_equipment table -

    equip_id              equip_name    
    1                      Air Conditioning
    2                      Brake System
    3                      Mobile Connectivity
    4                      Steering Wheel
    5                      Navigation System
    

    new_equipment_trims表 -

    row_id        trim_id          equip_id               equip_name                               equip_val
    1             101286108        1                      Front Air Conditioning Zones             dual
    2             101286108        1                      Front Air Conditioning                   automatic climate control
    3             101286108        1                      Rear Heat                                rear ventilation ducts
    4             101286108        1                      Air Filtration                           interior air filtration
    5             101286108        2                      Rear Brake Type                          disc
    6            101286108         2                      Electronic Brakeforce Distribution       electronic brakeforce distribution
    7            101286108         2                      Front Brake Diameter                     12.6
    

    您可以看到这两个表之间的关系是equip_id。

    现在我想显示结果 -

    显然这是equip_id = 1和trim_id = 101286108的结果。它可以用于任何equip_id和trim_id。但如果一个人好转,那么其他人也会采用这种格式。因此循环将继续并首先显示第一个表中的主设备名称,然后显示每个equip_id的设备名称及其第二个表中的值。

    Air Conditioning (Main Equipment Name)
    (Equipment Name)                                     (Equipment Value)
    Air Filtration                                       interior air filtration
    Front Air Conditioning                               automatic climate control
    Front Air Conditioning Zones                         dual
    Rear Heat                                            rear ventilation ducts
    

    所以请告诉我什么是准确的查询才能带来这个结果。

    我正在尝试这个 -

    SELECT `ne`.`equip_id` , `ne`.`equip_name` AS 'main_equip_name', `net`.`equip_name` AS 'equip_name', `net`.`equip_val` AS 'equip_value'
    FROM `new_equipment` AS `ne`
    INNER JOIN `new_equipment_trims` AS `net` ON `ne`.`equip_id` = `net`.`equip_id`
    WHERE `net`.`trim_id` =101286108
    GROUP BY `ne`.`equip_name`
    ORDER BY `ne`.`equip_name`
    

    但它无法正常工作,并且无法获取上述所需结果。所以请帮助我。

    编辑 -

    通过使用你的内部联接和联合,查询带来了我想要的正确结果,但我现在有了一个新问题。我注意到那些带有主设备名称的行也会出现在没有子设备及其值的结果集中。要更好地理解它,请查看快照 -

    enter image description here

    你可以看到像天窗等主要设备没有任何子设备名称和价值,但它们仍然存在。如何从结果中删除它们?这是我的查询 -

    SELECT 0 AS RowType, `equip_id` , `equip_name` , 'Main Equip' AS `equip_value`
    FROM `new_equipment`
    UNION SELECT 1 , `net`.`equip_id` , `net`.`equip_name` , `net`.`equip_val`
    FROM `new_equipment` AS `ne`
    INNER JOIN `new_equipment_trims` AS `net` ON `ne`.`equip_id` = `net`.`equip_id`
    WHERE `net`.`trim_id` =101286108
    ORDER BY `equip_id` , RowType
    

2 个答案:

答案 0 :(得分:1)

所以要获得equip_id = 1和trim_id = 101286108,你可以这样做:

SELECT ne.equip_id, ne.equip_name AS main_equip_name, net.equip_name, net.equip_val
FROM new_equipment AS ne
INNER JOIN new_equipment_trims AS net 
  ON ne.equip_id = net.equip_id
WHERE net.equip_id=1
  AND net.trim_id=101286108

但是,要获得一个显示主要设备名称后跟子项的查询,您可以尝试这样的事情:

SELECT 0 AS RowType, equip_id, equip_name, '(Main Equip)' AS equip_value
FROM new_equipment 
UNION
SELECT 1, net.equip_id, net.equip_name, net.equip_val
FROM new_equipment AS ne
INNER JOIN new_equipment_trims AS net 
  ON ne.equip_id = net.equip_id
ORDER BY equip_id, RowType

答案 1 :(得分:0)

回答你的编辑。更改第一个SELECT查询可以帮助您:

SELECT 0 AS RowType, equip_id, equip_name, Main Equip AS equip_value
FROM new_equipment 
WHERE equip_id IN (SELECT DISTINCT equip_id FROM new_equipment_trims 
                   WHERE trim_id=101286108)
UNION 
SELECT 1, net.equip_id, net.equip_name, net.equip_val
FROM new_equipment AS ne
INNER JOIN new_equipment_trims AS net ON ne.equip_id = net.equip_id
WHERE net.trim_id=101286108
ORDER BY equip_id, RowType