выберите строки, где 10 столбцов - PullRequest
0 голосов
/ 21 января 2019

Я хочу получить строки, используя одну строку, но эта строка используется для проверки более 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";
  }
}

Я успешно использую этот код, но процесс слишком длинный

Есть ли более простой и практичный способ преодоления этой проблемы? спасибо

1 Ответ

0 голосов
/ 21 января 2019

Как было отмечено в комментариях, дизайн вашей базы данных является неоптимальным.Вы можете пересмотреть и изменить это.Кроме того, иметь имена столбцов 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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...