подсчитывать строки в таблице со многими различными параметрами

Я знаю, что могу подсчитать, сколько строк имеет определенную строку в столбцах моей таблицы, как это …

$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 .

Но как я могу это сделать для нескольких переменных строки $timeOfClass без написания нескольких операторов SQL? У меня их много. Будет ли это чем-то вроде создания массива операторов SQL, а затем запустить их через цикл while fetchColumn(0) ?

 <?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 , чтобы получить несколько счетчиков для циклирования.

Вы пытаетесь сделать это для нескольких значений $ timeOfClass?

Вы можете поместить все переменные $ timeOfClass в массив (W-7PM-A, W-8PM-A и т. Д.), Затем используйте sql следующим образом:

SELECT count (*) FROM students WHERE timeOfClass IN ('W-7PM-A', 'W-8PM-A', …) GROUP BY timeOfClass

Это даст вам один SQL-запрос, который вы можете прокрутить по строкам, чтобы получить индивидуальные подсчеты.

where timeofclass in ("value 1, 'value 2'); – это правильный синтаксис sql. Вы можете взять свой массив и создать предложение in и объединить его в конец вашего оператора. обрабатывает запрос и принимает CSV значений в качестве параметра. HTH