计算表中具有许多不同参数的行

时间:2014-02-10 22:56:24

标签: php mysql sql pdo

我知道我可以计算在我的表的列中有多少行有这样的字符串...

  $timeOfClass="W-7PM-A";
  $inclass101 = $db->prepare("SELECT count(*) FROM students WHERE timeOfClass =?");
  $inclass101->execute(array($timeOfClass));
  $inclass101rows = $inclass101->fetchColumn(0);

$inClass101rows反映了我的数据库中$timeOfClassW-7PM-A的行数。

但是如何在不编写多个SQL语句的情况下为$timeOfClass字符串的多个变量执行此操作?我有很多。这会像创建一个SQL语句数组,然后通过fetchColumn(0)的while循环运行它们吗?

3 个答案:

答案 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查询,您可以遍历行以获取各个计数。