2012-12-12 27 views
0

我是一个新手程序员,想知道是否有办法以正确工作的格式对以下代码进行纠正。 (我似乎总是搞砸了语法)。选择是否存在?

$query2 = mysql_query("SELECT IF EXISTS EmployeeName, EmployeeNumber, Position, 
ManagementTraining1, ManagementTraining2, ManagementTraining3, ManagementTraining4, 
ManagementTraining5, ManagementTraining6, ManagementTraining7 FROM 
managementMeetingAttendance ORDER BY EmployeeNumber") or die(mysql_error()); 

我收集来自动态创建的表中的数据,不知道是否有类似的东西了“IF存在”可以为列中所作的陈述可能或可能不存在。

任何帮助将不胜感激! 谢谢!

+1

难道你不知道你的列吗? –

+6

哦,这不是一个规范化的数据库模式。我放火烧了一遍,然后重新开始。 “动态创建表”?听起来更麻烦。 – duffymo

+1

看看[数据库规范化](http://en.wikipedia.org/wiki/Database_normalization)来更好地组织数据。列不应该动态添加和删除。这是一个主要的代码味道。如果你不能这样做,有一组固定的列,并将NULL插入到缺少数据的列中。 –

回答

0

没有,没有,但你可以先查询列名的数据库:

select column_name from information_schema.columns where table_name=<TABLE> 
+1

这是_potentially_他将不得不去的地方,尽管我会亲自看看其他解决方案。包括更好的模式设计 –

0

我不是一个MySQL的人,但我不能确定该声明你”的意图已经写好了,根据你的意图,这可能是一个有效的答案。

你已经有了:

SELECT IF EXISTS EmployeeName, EmployeeNumber, Position, 
ManagementTraining1, ManagementTraining2, ManagementTraining3, ManagementTraining4, 
ManagementTraining5, ManagementTraining6, ManagementTraining7 FROM 
managementMeetingAttendance ORDER BY EmployeeNumber 

既然你没有where子句,你大概不是寻找一个特定的记录,以及使用的“存在”,似乎你只是询问是否表managementMeetingAttendance包含至少一条记录,其结果是列列表和按顺序排列的语句无关紧要。

((SELECT Count(*) FROM managementMeetingAttendance) > 0) 

如果表包含一行,则计算结果为true;否则计算结果为false。

然而,如果你需要确定表是否或不包含列出的每个列的,那么这是较为复杂

根据以前的答案,你需要使用INFORMATION_SCHEMA.COLUMNS来获取表格现有的列,然后查询此数据 - 如下所示:

IF EXISTS select 1 from (
    SELECT Column_Name FROM information_schema.columns 
    WHERE table_name = 'managementMeetingAttendance' AND column_name = 'EmployeeName' 
) eName AND EXISTS select 1 from (
    SELECT Column_Name FROM information_schema.columns 
    WHERE table_name = 'managementMeetingAttendance' AND column_name = 'EmployeeNumber' 
) eNum AND EXISTS select 1 from (
    SELECT Column_Name FROM information_schema.columns 
    WHERE table_name = 'managementMeetingAttendance' AND column_name = 'Position' 
) ePos AND EXISTS select 1 from (
    SELECT Column_Name FROM information_schema.columns 
    WHERE table_name = 'managementMeetingAttendance' AND column_name 
     = 'ManagementTraining1' 
) eTrng1 AND EXISTS select 1 from (
    etc