2016-03-08 129 views
1

我已经为此奋战了几天,因为SQL不是我经常使用的东西,我无法让我的查询以我想要的方式工作。SQL - 需要帮助编写/修改查询

我有使用“TOXI”解决方案标记记录一个简单的测试数据库(三个表,一个充当链接“ProgramCourses”)

我的表

Program: 

- ProgramID : int 
- ProgramName : varchar 

Course: 

- CourseID : int 
- CourseName : varchar 

ProgamCourses: 

- ProgramID : int 
- CourseID : int 

我想什么做的是将所有标签收集为字符串,然后将它们作为新列添加到程序表中。

我查询

SELECT * , GROUP_CONCAT(c.CourseName) AS tags_list 
FROM `Program` p 
LEFT JOIN ProgramCourses AS pc ON p.ProgramID = pc.ProgramID 
LEFT JOIN Course AS c ON pc.CourseID = c.CourseID 
GROUP BY p.ProgramID 
ORDER BY p.ProgramID 

这有点做什么,我需要,但它重复一些列和结果,我得到的是:

ProgramID ProgramName  ProgramID CourseID CourseID CourseName tags_list 

,而不是

ProgramID ProgramName  CourseName 

任何帮助将是非常感激。 如果有人愿意为我写一个查询,请把它写成表格和列的全名,因为这样可以使我更容易理解和采用其他用途。 谢谢。

T.

+0

不要这样做。如果您想将标签作为字符串,请在查询时进行计算。 –

+0

不要使用邪恶'SELECT *' – Strawberry

回答

0

DISTINCT c.CourseName返回与不同CourseName行数的计数。

SELECT * , GROUP_CONCAT(DISTINCT c.CourseName) AS tags_list 
FROM `Program` p 
LEFT JOIN ProgramCourses AS pc ON p.ProgramID = pc.ProgramID 
LEFT JOIN Course AS c ON pc.CourseID = c.CourseID 
GROUP BY p.ProgramID 
ORDER BY p.ProgramID 

对于更多信息参观Official

0

试试这个

SELECT * , GROUP_CONCAT(c.CourseName) AS tags_list 
FROM `Program` p 
LEFT JOIN ProgramCourses AS pc using(ProgramID) 
LEFT JOIN Course AS c using(CourseID) 
GROUP BY p.ProgramID 
ORDER BY p.ProgramID 
+0

谢谢你。这有点做我想在phpMyAdmin中测试时,但是当从PHP文件调用时,我得到错误“致命错误:失败解析SQL查询上选择:SELECT *,GROUP_CONCAT(c.CourseName)AS tags_list从'程序'p左加入ProgramCourses AS PC使用(ProgramID)LEFT JOIN课程AS c USING(CourseID)GROUP BY p.ProgramID ORDER BY p.ProgramID。错误是解析错误:第3行上的意外子句LEFT JOIN ProgramCourses AS pc USING(ProgramID)^ found:“在1773行的C:\ UwAmp \ www \ xataface-2.1.1 \ lib \ SQL \ Parser.php中使用“。有任何想法吗?谢谢。 – TomTon