我正在做一个mysql查询,我想加入两个表(Projects和Country):
+----------------+ +-------------------------+
| Project ID | | id |
+----------------+ +-------------------------+
| Name | | name |
+----------------+ +-------------------------+
| countryid | | lat, long (two columns) |
+----------------+ +-------------------------+
我正在使用此查询:
SELECT country.name, country.latitude, country.longitude
FROM projects JOIN country ON projects.countryid = country.id;
直到现在!接下来会发生什么,每个项目都有一个类(TO-DO,DOING,DONE)。每个类都是一个包含所有项目ID的表。
结构必须是这样的,因为每个类都有其他信息。只有当项目属于该类时,该信息才存在。例如,TO-DO类中的项目具有“start_prevision_date”,该项仅在TO-DO表中有效(来自其他类的字段仍为空)。
我想要做的是为每个项目分配一种颜色,具体取决于他是做什么,做什么还是完成。一个完美的解决方案是返回如下值的查询:
ResultSet:
+--------------+------------------+-------------------+-------+-------+------+
| country.name | country.latitude | country.longitude | TO-DO | DOING | DONE |
+--------------+------------------+-------------------+-------+-------+------+
| Portugal | 13,4 | 15,6 | 1 | 0 | 0 |
+--------------+------------------+-------------------+-------+-------+------+
可以同时在多个列中
其中1表示他属于,0表示他不属于。我可以检查一下,打印出正确的颜色!
有没有办法有效地做到这一点?避免使用额外的三个查询。
我希望我很清楚。
答案 0 :(得分:1)
您可以使用以下查询:
SELECT
country.name,
country.latitude,
country.longitude,
IF (TO-DO.sureField IS NULL, 0, 1) as TO-DO,
IF (DOING.sureField IS NULL, 0, 1) as DOING,
IF (DONE.sureField IS NULL, 0, 1) as DONE
FROM projects
LEFT JOIN country ON projects.countryid = country.id
LEFT JOIN TO-DO ON projects.projectid = TO-DO.projectid
LEFT JOIN DOING ON projects.projectid = DOING.projectid
LEFT JOIN DONE ON projects.projectid = DONE.projectid;
sureField必须是每个类表中必须填充的字段,当项目在该类中时不是null,否则为null。
我在MySql中测试了一个类似的案例并且有效。
这会给你:
ResultSet:
+--------------+------------------+-------------------+-------+-------+------+
| country.name | country.latitude | country.longitude | TO-DO | DOING | DONE |
+--------------+------------------+-------------------+-------+-------+------+
| Portugal | 13,4 | 15,6 | 1 | 1 | 0 |
+--------------+------------------+-------------------+-------+-------+------+
如果DOING中的项目也保留在TO-DO中,或者:
ResultSet:
+--------------+------------------+-------------------+-------+-------+------+
| country.name | country.latitude | country.longitude | TO-DO | DOING | DONE |
+--------------+------------------+-------------------+-------+-------+------+
| Portugal | 13,4 | 15,6 | 0 | 1 | 0 |
+--------------+------------------+-------------------+-------+-------+------+
如果DOING中的项目从TO-DO中删除。
因此,您必须适当地管理结果集上的查询。
此致