0

我要做的是搜索我的表并计算一个字母的实例,并将每个实例的 ID 存储在 mysql 和 php (PDO) 中。

我一直在搞砸的是:

$user = 'john';
$stmt = $pdo->prepare("SELECT id, SUBSTR(surname, 1, 1) as surname_init,COUNT(*) as count FROM first_table WHERE user = :user GROUP BY surname_init ORDER BY count DESC");
$stmt->bindValue(":user", $user);

$stmt->execute();
$row = $stmt->fetchAll(PDO::FETCH_ASSOC);

var_dump($row);

这是结果:

array (size=2)
  0 => 
    array (size=3)
      'id' => string '3' (length=1)
      'surname_init' => string 'B' (length=1)
      'count' => string '2' (length=1)
  1 => 
    array (size=3)
      'id' => string '7' (length=1)
      'surname_init' => string 'D' (length=1)
      'count' => string '1' (length=1)

所以我有两个结果:B 有 2 个实例,D 有一个。然而,“B”只有一个从两个返回的结果 id。

这可能吗?我想我在这里遗漏了一些东西..

4

2 回答 2

3

用于GROUP_CONCAT()获取与组匹配的所有行,例如:

SELECT
    GROUP_CONCAT(id) AS id_list,
    SUBSTR(surname, 1, 1) as surname_init,
    COUNT(*) as count
FROM first_table
WHERE user = :user
GROUP BY surname_init
ORDER BY count DESC
于 2013-08-13T01:19:20.990 回答
0

看看这是否有帮助:

$user = 'john';
// use this to get unique starting characters for surnames for the user John
$stmt = $pdo->prepare("SELECT SUBSTR(surname, 1, 1) as `surname_init`, 
                       COUNT(*) as `count` FROM first_table 
                       WHERE user = :user GROUP BY 
                       surname_init ORDER BY count DESC");
$stmt->bindValue(":user", $user);
$stmt->execute();
$rows1 = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($rows1 as $row1){
    echo "<BR>Starting Letter: " . $row1['surname_init'];
    echo "<BR>Count: " . $row1['count'];

    // now get all the IDs for this user that have the 
    // surnames starting with this alphabet
    $stmt = $pdo->prepare("SELECT ID, SUBSTR(surname, 1, 1) as `surname_init`, 
                       FROM first_table 
                       WHERE user = :user 
                       AND surname LIKE :surname");
    $stmt->bindValue(":user", $user);
    $stmt->bindValue(":surname", $row1['surname_init']."%");

    $stmt->execute();
    $rows2 = $stmt->fetchAll(PDO::FETCH_ASSOC);

    foreach ($rows2 as $row2){
        // do insert based on ID here
    }        
}
于 2013-08-13T01:14:57.750 回答