0

我想检查查询是否带来结果。现在我为我的查询做一个行计数。如果行数 > 则 0 我再次创建一个新查询来获取查询的所有结果。当我在 az 的范围内创建一个字母查询循环(即WHERE name LIKE "a%")时,它将导致 52 个查询来完成任务,这在 imo 中有点过分了。你将如何面对这样的任务?结果我想呈现一个带有字母顺序链接的菜单。

A
----
Apple Link
Annanas Link

B
----
Banana Link

etc.

也许还有另一种方法可以在一个查询中做到这一点,并以某种方式分解结果字母,因为我需要为每个字母呈现一个新的引入菜单点。我希望你有一些有用的指针来调整我的表现

4

1 回答 1

2

您不能一次选择所有内容并按列排序吗?

SELECT * FROM your_table ORDER BY column_name ASC

然后,如果有行,您可以循环并比较第一个字母以确定您所在的字母:

$stmt->execute();
if ($stmt->rowCount()) {
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        $value = $row['column_name'];
        $first_letter = $value[0];
    }       
}

一旦你有了第一个字母,你就可以对这个值做任何你想做的事情

要扩展此答案,您可以使用类似这样的方法来回显带有标题的值:

// initialize this variable
$current_letter = '';

// if you get results
if ($stmt->rowCount()) {
    // loop through each row
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        // when you loop, get the value
        $value = $row['column_name'];
        // if the value does not have the current letter you are on:
        if ($current_letter != $value[0]) {
            // echo a header for the new letter
            echo "<h2>" . $value[0] . "</h2>";
            // set the new letter to the current letter
            $current_letter = $value[0];
            // echo the actual value
            echo $value . "<br />";
        } else {
            // the value falls under our current letter, echo it
            echo $value . "<br />";
        }
    }
}
于 2013-01-16T00:27:47.977 回答