【问题标题】:SQL Like without column name (using php)SQL Like 没有列名(使用 php)
【发布时间】:2016-03-02 21:08:06
【问题描述】:

我需要从表的所有列中查找以特定值开头的结果,而不管列并假设我不知道列的名称,如下所示:

$sql = "SELECT * FROM $myTable WHERE AllTheColumns LIKE '{$theValue}%'";

我知道在“WHERE”之后我必须指定列名,但任何其他解决方案都可以(如果存在)。

【问题讨论】:

  • 您可以在元数据信息中查找关于列名的信息。
  • @todd 的回答应该会为您提供所需的结果。但是我想知道你为什么要这样做?我认为您可能会更成功地改进您的流程并调整您的表格结构。
  • @Dijon 我正在尝试优化我的代码,因为我正在使用 @яша 方法处理具有 15 - 23 列的表。

标签: php sql


【解决方案1】:

还有其他方法可以做到。

SELECT * FROM $myTable 
    WHERE Column1 LIKE '%$search%' 
        OR Column2 LIKE '%$search%' 
        OR Column2 LIKE '%$search%'  
        OR Column3 LIKE '%$search%'

【讨论】:

  • 是的,我知道那样,但如果我不知道列的名称?
  • 不幸的是,除非您深入研究数据库元数据,否则这是不可能的
【解决方案2】:

您可以先从表中选择所有列名:

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'my_database' AND TABLE_NAME = 'my_table';

// 将生成的列名存储在 $column_names var;

然后,使用一个列名数组,创建一个循环,将每个列名添加到查询中:

$query = "SELECT * FROM $table_name WHERE ";

foreach($column_names as $i => $colname) {
  $query .= "$colname LIKE %$search_string% ";
  if ($i+1 < $column_names.length()) {
    $query .= " OR ";
  }
}

// do stuff with query

【讨论】:

  • 我尝试这种方式,但我认为我没有正确创建列名数组,我有这个: $sql="SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '$db' AND TABLE_NAME ='个人';"; $thenames = mysql_query($sql, $db); $column_names=数组(); while($fila = mysql_fetch_object($thenames)) { array_push($column_names,$fila);和错误:警告:mysql_fetch_object():提供的参数不是 C:\xampp\htdocs\ 中的有效 MySQL 结果资源 ...
【解决方案3】:

可能有两种选择。

1)您可以获取所有列名并进行相应的操作。

2) 您可以通过键入索引来引用特定的列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-24
    • 2012-10-27
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    相关资源
    最近更新 更多