我目前有一个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个匹配的数字”
答案 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}}