Я уже опубликовал это, но я хочу объяснить это лучше. У меня есть веб-сайт, на котором студенты вставляют 4 курса и 4 комментария для каждого курса, это столбцы таблицы SQL: Course1, Course2, Course 3, Course 4, Comment1, Comment2, Comment 3, Comment 4.
У меня есть поиск, в котором любой вход для студентов, например, география (которая может быть сохранена в любом из четырех столбцов курса), и я хочу, чтобы мой SQL-запрос возвращал все комментарии для географии. Например, если студент сохранил географию в позиции Course2, я хочу, чтобы в моем SQL-запросе был выбран comment2, где course2 = география. Возможно, он сохранил его в курсе 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
Предполагая, что структура таблицы действительно (sic) не может быть изменена (больше), я бы пошел с 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, по крайней мере, шанс сражаться с индексами, чтобы найти соответствующие записи.