选择mysql表的所有内容,并回显相应类别的列表

时间:2013-12-19 04:55:16

标签: mysql sql select join if-statement

我一直在研究我的PHP技能,但我甚至不知道如何开始构建这个函数。

假设我在名为Cars的表中有20个条目,并且这些汽车中的每一个都有自己唯一的自动增量ID,而另一列中的制造商的ID。然后,我有另一张表,其中包含汽车制造商的名称。因此,例如,5辆车有汽车制造商ID A,另外3辆有汽车制造商ID B等等(其中A和B是汽车制造商的id号)。

我如何搜索汽车表,然后按字母顺序回显汽车制造商列表?

我可以弄清楚如何通过每次找到一个名字来回显汽车制造商的名单,但这意味着拥有相同的汽车制造商名称5次而不是仅仅一次,我不知道如何按字母顺序排列它。

这是一个更加图解的例子来解释我的意思,如果我不是很清楚。

汽车表:

1 - WhatCar - 3
2 - WhoCar  - 3
3 - TheCar  - 2
4 - SomeCar - 3
5 - ThisCar - 1
6 - ACar    - 3

制造者表:

1 - AMaker
2 - DMaker
3 - CMaker
4 - BMaker

期望的输出:

AMaker
CMaker
DMaker

此外,如果我有一个第三个表,包含3个条目,只有自动增量ID和汽车ID,如下:

1 - 3
2 - 4
3 - 6

如何使脚本生成一个Makers列表,该列表仅使用if语句对应于此“过滤器”? (如果X然后解析Cars表,否则Y只解析第三个表指定的Cars表中的汽车)

我认为这是一个简单的功能,但我似乎无法在脑海中描绘它,也找不到合适的例子。

2 个答案:

答案 0 :(得分:0)

查询相当简单。 。 。 joindistinct以及order by

对字段名称做出一些假设:

select distinct m.maker
from cars c join
     makers m
     on c.makerid = m.makerid
order by m.maker;

如果您有第三张表,则可以使用额外的joinwhere条件处理此问题:

select distinct m.maker
from cars c join
     makers m
     on c.makerid = m.makerid join
     thirdtable tt
     on c.carid = tt.carid
order by m.maker;

答案 1 :(得分:0)

试试这个:

SELECT DISTINCT A.makers
FROM Makers A 
INNER JOIN Cars C ON A.MakerId = C.MakerId 
ORDER BY A.makers

第二个问题

SELECT DISTINCT A.makers
FROM Makers A 
INNER JOIN Cars C ON A.MakerId = C.MakerId 
LEFT JOIN CarFilter CF ON C.CarId = CF.CarId 
WHERE CASE WHEN **Condition to parse Cars table** THEN 1 
           WHEN **Condition to parse Cars filter table** THEN 1 CF.Id 
           ELSE 1 
      END) IS NOT NULL
ORDER BY A.makers