我想使用查询获取表的单行列中可用的多个数据如何做到这一点?

时间:2017-12-23 08:44:25

标签: php database

我有一个名为country的数据库表,其中包含大学名称,流,入学考试和截止。 我想从tabel中选择大学,并使用查询作为

SELECT university_name FROM country WHERE stream = ms AND entrance_exam = GMAT OR MS;

当我在下拉列表中选择GMAT或MS时,我想要来自表格中的university_name,其中stream是ms。请解决我的问题并告诉我该怎么做? enter image description here

1 个答案:

答案 0 :(得分:1)

您无法在OR测试后立即=。如果要针对多个值测试单个列,则需要重复测试,例如

stream = 'ms' OR stream = 'mba'

在SQL中有一个快捷方式:

stream IN ('ms', 'mba')

但是,这对您的设计不起作用,因为您有一个以逗号分隔的列表。要测试成员身份,您需要使用FIND_IN_SET(),并且没有多项测试的快捷方式。

SELECT university_name
FROM country
WHERE (FIND_IN_SET('ms', stream) OR FIND_IN_SET('mba', stream))
AND (FIND_IN_SET('GMAT', entrance_exam) OR FIND_IN_SET('MS', entrance_exam))

请参阅Query with multiple values in a column

确保在每个OR表达式与AND混合时,在括号周围加上括号。见SQL statement is ignoring where parameter

如果您对数据进行规范化而不是使用逗号分隔列表,那会好得多。您应该有一个university_stream表,其中包含以下行:

university_name     stream
pune university     ms
pune university     mba
Acadia University   ms
Acadia University   mba

和一个university_entrance表,其行如:

university_name     exam
pune university     GMAT
pune university     MS
Acadia University   GMAT
Acadia University   MS

然后你会加入表格:

SELECT DISTINCT a.university_name
FROM university_stream AS a
JOIN university_entrance AS b ON a.university_name = b.university_name
WHERE a.stream IN ('ms', 'mba')
AND b.exam IN ('GMAT', 'MS')