Php MySQL:获取表中以“name”开头的所有列;ctr“;和值1
我的店铺中的产品有国家/地区限制,而且查询速度较慢,无法从product表中选择值为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?请
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),然后在单独的查找表中列出所有国家/地区。会让你的生活更简单。