SQL Select字符串不起作用


SQL Select string not working

我已经发布了这篇文章,但我想更好地解释它。我有一个网站,学生们在其中插入他们的4门课程和每门课程的4条评论,这些是SQL表列:课程1,课程2,课程3,课程4,评论1,评论2,评论3,评论4。

我有一个搜索,任何学生都可以在其中输入,例如地理(可以保存在四个课程列中的任何一个),我希望我的SQL查询返回地理的所有注释。例如,如果一个学生将Geography保存在Course2的位置,我希望我的SQL查询选择comment2,其中Course2=Geography。他可能在课程1中保存了它,所以它必须灵活,但只能选择学生选择的课程。这是我当前的SQL查询:

$SQL = "SELECT (Comment1 FROM Students WHERE Course1 = 'geography'), (Comment2 FROM Students WHERE Course2 = 'geography'), (Comment3 FROM Students WHERE Course3 = 'geography'),  (Comment4 FROM Students WHERE Course4 = 'geography')";

当前,此SQL查询不起作用。我知道这个结构可能看起来很奇怪,但从逻辑上讲,正如你所理解的,这是有道理的,尽管这可能不是正确的编码方式

$null = '';
if(mysql_num_rows($result)) {
  echo "<ol>";  
 while ($row=mysql_fetch_array($result)) {
  if($row["Class"]!=$null) {  
  if($null!='') {  
  echo "</ol><ol type='1'>";   
  } 
 }
 echo "<li><p>" . " " . $row["Comment1"]. " " . $row["Comment2"]." " .    $row["Comment3"] . " " . $row["Comment4"] . "</li></p>";
$i = $i +1;
}
echo "</ol>";

您的查询错误:试试这个

SELECT Comment1, Comment2, Comment3, Comment4 
FROM Students 
WHERE Course1 = '$value1' AND Course2 = '$value1' 
AND Course3 = '$value1' AND Course4 = '$value1'

SELECT Comment1, Comment2, Comment3, Comment4 
FROM Students 
WHERE Course1 = '$value1' OR Course2 = '$value1' 
OR Course3 = '$value1' OR Course4 = '$value1'

根据您的要求,在检查课程时使用AND或or

我不确定我是否理解你想要什么,但你可以试试这个(未经测试):

SELECT Student_ID, 
    CASE
        WHEN Course1 = 'geography' THEN Comment1
        ELSE NULL
    END AS comment1_result,
    CASE
        WHEN Course2 = 'geography' THEN Comment2
        ELSE NULL
    END AS comment2_result,
    CASE
        WHEN Course3 = 'geography' THEN Comment3
        ELSE NULL
    END AS comment3_result,
    CASE
        WHEN Course4 = 'geography' THEN Comment4
        ELSE NULL
    END AS comment4_result
FROM Students

假设表结构真的(原文如此)不能再改变了,我会在这里使用UNION

    ( SELECT Comment1 as comment FROM soFoo WHERE Course1='geography' )
UNION ALL
    ( SELECT Comment2 as comment FROM soFoo WHERE Course2='geography' )
UNION ALL
    ( SELECT Comment3 as comment FROM soFoo WHERE Course3='geography' )
UNION ALL
    ( SELECT Comment4 as comment FROM soFoo WHERE Course4='geography' )

它至少为MySQL提供了一个使用索引来查找匹配记录的战斗机会。