是否可以在查询中获取表的列名?我正在使用PDO
stu_name maths science music art
John done done - done
Max - done - done
Peter - done - -
Run Code Online (Sandbox Code Playgroud)
例如,如何获得John未完成的主题(-)?
music应该是结果.
这就是我现在所处的位置.我不知道怎么做.
$sql = "SELECT * FROM coll_student WHERE stu_name = :name AND ?? = '-' LIMIT 1";
$stat = $connect->prepare($sql);
$stat->execute(array(':name'=>"John"));
$output = $stat->fetchAll(PDO::FETCH_COLUMN);
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
SELECT
GROUP_concat(COALESCE(CASE WHEN maths = '-' THEN 'maths' END, ''),
COALESCE(CASE WHEN science = '-' THEN 'science' END, ''),
COALESCE(CASE WHEN art = '-' THEN 'art' END, ''),
COALESCE(CASE WHEN music = '-' THEN 'music' END, '')) AS SubjectsNotDone
FROM coll_student
WHERE stu_name = 'John'
AND ((maths = '-') OR
(science = '-') OR
(art = '-') OR
( music = '-')) ;
Run Code Online (Sandbox Code Playgroud)
这会给你:
| SubjectsNotDone |
|-----------------|
| music |
Run Code Online (Sandbox Code Playgroud)
但是,您的表未规范化.通过创建新表,您可以使其更简单,更容易,性能更高Subjects:
SubjectId,SubjectName.然后表格coll_student将是这样的:
stu_name,SubjectId- 主题表的外键:
constraint FK_SubjectId foreign key (SubjectId) references Subjects(SubjectId)
Run Code Online (Sandbox Code Playgroud)Status:bit或int作为已完成或未完成的标志(如果有,则为其他状态).
然后你的查询会更简单,如下所示:
SELECT subjectname
FROM coll_student AS c
INNER JOIN Subjects AS s ON c.SubjectID = s.SubjectId
WHERE c.name = 'John' AND c.Status = 0;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |