PHP对象/ Sql查询中的多数组结果

时间:2013-04-05 10:41:37

标签: php mysql sql

我有一个名为Index的对象,它有一个名为_fletter的属性(在本例中是私有属性)。

我有一个sql查询,它使用以下查询从表中获取所有不同的值:

SELECT DISTINCT fletter FROM books ORDER BY fletter ASC

我调用此查询的方式是通过私有函数执行所有与数据库相关的操作并返回变量:

function getFirstLetter() {
    // Database stuff omitted
    $stmt->execute();
    $res = $stmt->fetchAll(PDO::FETCH_ASSOC);
    return $res;
}

我将结果提供给_fletter属性的方式如下:

$this->_fletter = $this->getFirstLetter();

最终发生的事情是$this->_fletter的属性是一个关联数组,当print_r给出时:

[0] => Array
    (
        [fletter] => A
    )
    // etc.

然后我想使用foreach语句,使其迭代每个_fletter[x],其中x对应于有问题的字母并运行以下sql语句

SELECT booktitle, isbn, pages FROM books WHERE booktitle = ':booktitle'

然后我想返回上一个例子中的结果:

$this->_fletter = $this->getBookTitles();

并且,我的想法是我希望将新关联数组的结果添加到_fletter数组中,其中第一个字母对应于新结果集,类似于:

[0] => Array
    (
        [fletter] => [A]
            (
                [1] => 'A time to kill'
                [2] => 'Almost Famous'
            )
    ) //etc - note I may not have written the syntax correct

因此,新查询必须采用'_fletter'的值,运行查询并将结果返回到与第一个字母相同的位置或相同的数组条目下。所以我希望fletter成为新结果数组的新键

如果我只是将新结果添加到_fletter数组,它只会附加到现有数组而不使用[fletter]的值,而是会向数组添加新条目:

[15] => Array
        (
            [fletter] => W
        )

    [A] => Array
        (
            [0] => Array
                (
                    [booktitle] => A Time to kill
                    [isbn] => 1234567890
                )

有关如何实现这一目标的任何想法?我想避免将php放在页面的html部分,但是,如果没有其他选择,我可能不得不这样做。

1 个答案:

答案 0 :(得分:1)

你很难理解你想要的东西。我认为你只需要一个带有一个foreach的查询

SELECT fletter, booktitle, isbn, pages FROM books

<?php
$fletters = array();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    $index = $row['fletter'];
    unset($row['fletter']);
    $fletters[$index][] = $row;
}