Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL:获取表中以“name”开头的所有列;ctr“;和值1_Php_Mysql - Fatal编程技术网

Php MySQL:获取表中以“name”开头的所有列;ctr“;和值1

Php MySQL:获取表中以“name”开头的所有列;ctr“;和值1,php,mysql,Php,Mysql,我的店铺中的产品有国家/地区限制,而且查询速度较慢,无法从product表中选择值为1的所有国家/地区列 我选择店铺中所有活动的国家/地区: $ids = select id from country where active = 1; 然后,我选择在产品中处于活动状态的所有国家: foreach $ids as $id { select ctr_{$id} from product where ctr_{$id} = 1; 是否有更快的方法获取以ctr.*开头的列,以及哪个值等于1?请

我的店铺中的产品有国家/地区限制,而且查询速度较慢,无法从product表中选择值为
1
的所有国家/地区列

  • 我选择店铺中所有活动的国家/地区:

    $ids = select id from country where active = 1;
    
  • 然后,我选择在产品中处于活动状态的所有国家:

    foreach $ids as $id { select ctr_{$id} from product where ctr_{$id} = 1;
    
  • 是否有更快的方法获取以
    ctr.*
    开头的列,以及哪个值等于
    1

    请尝试以下方法

    // first get the columns
    $query = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='product' AND COLUMN_NAME LIKE 'ctr_%'";
    $result = mysqli_query($conn, $query) or trigger_error(mysqli_error($conn),E_USER_ERROR);
    $cols = Array();
    while($row = mysqli_fetch_row($result)) $cols[] = $row[0];
    
    // then build the query
    if(count($cols))
    {
      $query = 'SELECT '.implode(',', $cols).' FROM product WHERE 1 IN ('.implode(',',$cols).')';
      $result = mysqli_query($conn, $query) or trigger_error(mysqli_error($conn), E_USER_ERROR);
      while($row = mysqli_fetch_assoc($conn,$result))
      {
        // do something with the row
        // ....
      }
    }
    

    您真的想查询列名,还是想从表中获取一些数据?我不清楚。你好,是的,我只想获取产品行中的列名,其中列名以ctr开头,值为1。通过以下操作,我获取所有列名:从
    信息架构
    中选择
    列名
    ,其中
    表名
    ='product'和
    列名
    如“ctr%”;但是我只想要值为1的列,我想您需要动态SQL来实现这一点。您好,谢谢。几乎与我在第一个线程中使用的相同。表中国家/地区的列数与产品和“ctr_*”相同;我想避免使用foreach,因为当产品列表很长时,它会很慢。你的问题的标题可能是错误的吗?因为这个答案完全符合问题的要求——它获取所有名称以
    ctr\uu
    开头的列,然后获取至少其中一列中包含值1的所有行。是和否。我几乎以相同的方式这样做,并想问,是否有更快的方法。我忘记了“更快”,现在添加了它。上面的代码中有什么在你的电脑上运行缓慢?顺便说一句,最佳做法是将列转换为行,即不为每个国家/地区设置列,而是仅使用2列(值和国家/地区ID),然后在单独的查找表中列出所有国家/地区。会让你的生活更简单。