选择10列的行

时间:2019-01-21 10:21:33

标签: php mysqli

我想使用一个字符串获取一行,但是该字符串用于验证多于1列,例如5列

-----------------------------------------------
|  id  |  code  |  1  |  2  |  3  |  4  |  5  |
-----------------------------------------------
|  01  | Number |  5  |  7  |  10 |  21 |  1  |
|  02  | String |  v  |  q  |  s  |  f  |  w  |
|      |        |     |     |     |     |     |
|      |        |     |     |     |     |     |
|      |        |     |     |     |     |     |
-----------------------------------------------

如果要使用循环方法,我想使用5列(1,2,3,4,5)进行SELECT mysqli,这会浪费很多时间

我已尝试使用此代码解决问题

$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 :(得分:2)

正如评论中指出的那样,您的数据库设计不是最佳的。您可能需要重新考虑并进行更改。另外,将列名设置为12等,这是非常的主意。至少让他们以字母开头。更好的是,给他们一些合理的名称,指示这些列实际包含的数据。

现在,假设您弄清楚了列名的真实含义,则可以使用简单的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);

更新:如果您的列名是非标准的,例如前面提到的12等,或者其中有空格,则简单的implode将不起作用,因为您需要对每个列名加反引号。在这种情况下,您将需要以下内容:

$inColumns = implode(',', array_map(function($c) { return "`$c`"; }, $columns));