我知道我可以计算在我的表的列中有多少行有这样的字符串...
$timeOfClass="W-7PM-A";
$inclass101 = $db->prepare("SELECT count(*) FROM students WHERE timeOfClass =?");
$inclass101->execute(array($timeOfClass));
$inclass101rows = $inclass101->fetchColumn(0);
$inClass101rows
反映了我的数据库中$timeOfClass
为W-7PM-A
的行数。
但是如何在不编写多个SQL语句的情况下为$timeOfClass
字符串的多个变量执行此操作?我有很多。这会像创建一个SQL语句数组,然后通过fetchColumn(0)
的while循环运行它们吗?
答案 0 :(得分:1)
<?php
// $timesOfClasses is an array in the form:
$timesOfClass = array(
"W-7PM-A",
"X-8AM-Y",
"...",
);
// Generate the IN clause safely for usage with prepared statements
$params = substr(str_repeat("?,", count($timesOfClass)), 0, -1);
$inclass101 = $db->prepare("SELECT COUNT(*) FROM `students` WHERE `timeOfClass` IN({$params})");
$inclass101->execute($timesOfClass);
$inclass101rows = $inclass101->fetchColumn(0);
使用SQL来改变结果,例如:添加GROUP BY
子句以获得多个循环计数。
答案 1 :(得分:0)
where timeofclass in ("value 1, 'value 2');
是正确的sql语法。您可以使用您的数组并创建in子句并将其连接到语句的末尾。您还可以创建一个处理查询的存储过程,并将CSV值作为参数。
HTH
答案 2 :(得分:0)
您是否尝试为$ timeOfClass的几个值执行此操作?
你可以将所有$ timeOfClass变量放在一个数组中(W-7PM-A,W-8PM-A等等)然后使用这样的sql:
SELECT count(*) 来自学生 在哪里timeOfClass IN('W-7PM-A','W-8PM-A',......) GROUP BY timeOfClass
这将为您提供一个SQL查询,您可以遍历行以获取各个计数。