我有一个可以在foreach循环中运行的函数getrows()。它给出了mysql查询返回的所有行。名称存储为 first.last
,我只知道名字。问题是有重复的名字,所以我需要做一些事情,如果他们是相同的(我想得到一个姓氏的子字符串)。
考虑到我的功能,如何检查重复并执行另一个操作?
函数getrows()
public function getRows($query, $params = []) {
try {
$stmt = $this->db_data->prepare($query);
$stmt->execute($params);
return $stmt->fetchAll();
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
foreach公司
<?php
foreach($division_result = $db->getRows('SELECT * FROM users WHERE division=? ORDER BY username', ['AWM']) as $division) {
$username = $division['username'];
$short_list_name = substr($username, 0, strpos($username, '.'));
echo $short_list_name . '<br>';
}
?>
结果呢
alicia
amy
angel
ashley
caitlin
cassie
cory
courtney
debbie
gabby
jamie
kamron
kelly
mallory
oliver
rhonda
tim <-- THIS ONE
tim <-- AND THIS ONE
tommy
travis
我能跑
mysql> SELECT SUBSTRING_INDEX(username, '.', 1) FROM users WHERE division='AWM' GROUP BY SUBSTRING_INDEX(username, '.', 1) HAVING count(*) > 1;
从终端产生:
+-----------------------------------+
| SUBSTRING_INDEX(username, '.', 1) |
+-----------------------------------+
| tim |
+-----------------------------------+
1 row in set (0.00 sec)
编辑,但我不知道如何将其纳入我目前的foreach,因为我需要两个名字。我只需要检测它们并对字符串做些不同的处理。
2条答案
按热度按时间lb3vh1jj1#
另一个选择是在查询中添加数据。如果在light db上使用,您可以这样重写您的请求:
相当重,可能不适用于所有db。但更直接的是,在那之后你只需要检查一下
dupes
>1.7nbnzgx92#
您可以在数组中存储名称列表,并检查其中是否存在名称
?>