Я хочу получить строки, используя одну строку, но эта строка используется для проверки более 1 столбца, ровно 5, например
-----------------------------------------------
| id | code | 1 | 2 | 3 | 4 | 5 |
-----------------------------------------------
| 01 | Number | 5 | 7 | 10 | 21 | 1 |
| 02 | String | v | q | s | f | w |
| | | | | | | |
| | | | | | | |
| | | | | | | |
-----------------------------------------------
Я хочу сделать SELECT mysqli, используя 5 столбцов (1, 2, 3, 4, 5), если я использую метод зацикливания, это потратит много времени.
я пробовал проблему с этим кодом
$value = "q";
for ($x = 1; $x <= 5; $x++) {
$cek = mysqli_query($con,"SELECT * FROM table where $x='$value' and id='02'")
if (mysqli_num_rows($cek) == 1) {
echo "success";
} else {
echo "fail";
}
}
Я успешно использую этот код, но процесс слишком долгий
есть ли более простой и практичный способ решить эту проблему? Спасибо
WHERE `1` = '$value' OR `2` = '$value' OR ...…?!






Как уже отмечалось в комментариях, дизайн вашей базы данных неоптимален. Возможно, вы захотите пересмотреть и изменить его. Кроме того, иметь имена столбцов 1, 2 и т. д. — плохая идея очень. По крайней мере, пусть они начинаются с буквы. А еще лучше дайте им разумные имена, указывающие, какие данные эти столбцы на самом деле содержат.
Теперь, предполагая, что вы выяснили, какими на самом деле должны быть имена ваших столбцов, вы можете использовать простой оператор IN для получения ваших данных. Обычный/распространенный способ его использования
WHERE some_column IN ('value1', 'value2', ...)
Тем не менее, ничто не мешает вам использовать его наоборот:
WHERE 'some_value' IN (column1, column2, ...)
Таким образом, ваш оператор SQL становится примерно таким:
SELECT *
FROM table
WHERE '$value' IN (column1, column2, column3, column4, column5)
AND id='02'
Теперь, если у вас есть имена столбцов в массиве, вы можете сделать это следующим образом:
$testColumns = ['column1', 'column2', 'column3', 'column4', 'column5'];
$value = "q";
$inColumns = implode(',', $testColumns);
$sql = "SELECT * FROM table WHERE '$value' IN ($inColumns) AND id='02'";
$cek = mysqli_query($con, $sql);
Обновлено: Если ваши имена столбцов нестандартны, например. вышеупомянутые 1, 2 и т. д., или в них есть пробелы, то простой implode не будет работать, потому что вам нужно заключать в кавычки каждое имя столбца. В этом случае вам понадобится что-то вроде этого:
$inColumns = implode(',', array_map(function($c) { return "`$c`"; }, $columns));