PHP + MYSQL - 基于表数据的循环

时间:2014-07-01 00:13:51

标签: php mysql loops

我目前有一个MySQL数据库,其中包含一个包含某组单词数据的表。结构是这样的(当然有更多的数据):

**ID**        **word**        **number**
----------------------------------------
  1             Test              10
  2             Test              14
  3             Test              20
  4             Apple             7
  5             Apple             8
  6             Apple             11
  7             Bus               3
  8             Bus               3
  9             Bus               5

ID是唯一密钥。

我要做的是从该表中获取所有数据并循环遍历它以获取每个“单词”集的“数字”数据,以便运行一些总和。

所以,我想获取所有数据,然后遍历它并为每个单词集做一些if语句,例如:获取与单词Test相关的所有数字,然后是与Apple等单词相关的所有数字等但是,由于该单词不是唯一键,因此我不确定如何将数据从数据库中提取出来后将其拆分。

到目前为止,我有以下内容:

public function getData() {

        $query = $this->db->prepare("SELECT * FROM table");
        $query->execute();

    try{

        $query->execute();
        $result = $query->fetchAll();

    }catch(PDOException $e){
        die($e->getMessage());
    }

}

很明显,我已经根据需要从数据库中提取了所有数据,并且可以print_r返回它没有任何问题的数据数组。现在我想遍历数据并为每个单词集完成一个特定的功能。例如:运行if语句,检查单词“Test”的3个数字是否相同,然后运行相同的检查以查看“Apple”的3个数字是否相同,然后再次“Bus”等等

作为一个例子,在循环/检查结束时,我希望能够回显一句话:“单词Bus包含2个匹配的数字”

1 个答案:

答案 0 :(得分:1)

以下是在SQL查询中执行此操作的方法:

SELECT word, COUNT(DISTINCT number) = 1 AS numbers_all_the_same
FROM table
GROUP BY word

根据您的数据,这将返回:

word    numbers_all_the_same
Test    0
Apple   0
Bus     0

因为他们中没有一个人在他们的小组中拥有相同的数字。如果任何单词具有相同的数字,则第二列中的1将为$all_words = array(); while ($row = $query->fetch(PDO::FETCH_ASSOC)) { $word = $row['word']; $number = $row['number']; if (!isset($all_words[$word])) { // We haven't seen this word before $all_words[$word] = array($number); // Create an array with the number } else { // We have seen this word before $all_words[$word][] = $number; // Add the number to the array } }

以下是如何创建所有数据的数组,按字词分组:

$uniq = array_unique($all_words["Apple"]);
if (count($uniq) == 1) ...

现在,您可以对与每个单词关联的数字执行任何类型的分析。如果您想知道所有数字是否相同,您可以这样做:

{{1}}