【问题标题】:MySQL & PHP - Looping a query AND "mapping" the results of each loop to a unique array WITHOUT "MySQL" functionsMySQL & PHP - 循环查询并将每个循环的结果“映射”到没有“MySQL”函数的唯一数组
【发布时间】:2014-07-07 03:00:48
【问题描述】:

我会注意到这是一个非常特殊情况,因此要从这个问题开始。在正常情况下,这样的功能会很简单:

  1. 我有一个名为 $post_id 的数组,其中包含 5 个值 (每个数字)
  2. 为了打印数组中的每个值,我使用以下循环:

.

for ($i = 0; $i < $num; $i++)
            {
        echo $post_id[$i] . '&nbsp;';
            }

...打印以下内容:49, 48, 47, 46, 43

   3. 在我的数据库中,我有一个如下所示的表:

   post_categories
_____________________
 post_id  | category
__________|__________
    43    |  puppies
    43    |   trucks
    46    |   sports
    46    |      rio
    46    | dolphins
    49    |     fifa

   4. 因此,使用数组 $post_id 中的数据,我想循环 数据库查询 以检索 category 列中的每个值post_categories 表,并根据“post id”将它们放入唯一命名的数组中,以便类似...

echo $post_id_49[0] . '&nbsp;', $post_id_46[1];

...假设您使用上表,将打印“fifa rio”。

此类查询的示例:

//Note - This is "false" markup, you'll find out why below

for ($i = 0; $i < $num; $i++)
            {
    $query = "SELECT category FROM post_categories WHERE post_id = $post_id[$i]";
    fakeMarkup_executeQuery($query);

            }

为什么这是一个“特殊”情况?出于同样的原因,上述查询为“假”。

为了详细说明,我正在使用一个不允许“正常”查询的软件包,也就是说,它使用自己的查询标记,以便相同的代码可以处理多种数据库类型,而无需处理给用户指定他们的数据库类型,这让程序根据数据库的类型解释查询。但是,它确实允许将查询存储在与所有查询相同的“形式”中,例如“$result = *query here*”(唯一的区别是它自己执行)。

因此,诸如mysql_fetch_array(或任何类似的 MySQL/MySQLi 函数)之类的函数不能,也不会工作。该软件也不提供任何形式的内置替代方案,有效地让用户发明自己的方法来实现相同的结果。我知道,很蹩脚。

所以,这就是我卡住的地方。如您所料,您在 Internet 上找到的所有信息都假定您可以使用这些 MySQL 和 MySQLi 函数。 我需要的是另一种方法,可以从每个循环的循环查询的结果中获取一个数组。我根本无法得出任何实际有效的结论。

tl;dr 我需要能够 (1) 循环查询,(2) 将每个循环的输出作为它是具有自己名称的数组,并且 (3),这样做无需使用像 mysql_fetch_array 这样的函数。 查询本身并不重要,所以不要专注于此。我知道如何处理查询。

我知道这非常令人困惑、冗长且复杂。几天来,我一直在这个烂摊子中跋涉——接近“作弊”的地步,并将我试图在这里获取的数据作为原始代码存储在数据库中。不好的做法,但肯定让我痛苦的头脑更容易了。

我向任何试图解开这个烂摊子的勇敢灵魂致敬,祝你好运。如果这真的不可能,请告诉我,以便我可以向软件开发人员发送一封愤怒的信。我能猜到的是,他们从来没有想过会出现像我这样的案子。也许这比我想象的要简单得多,但无论如何,我个人无法得出合乎逻辑的结论。

附加说明:由于一些未解释的错误消除了它,我不得不重写此 两次。为了我自己的理智,我将在发布后休息一下,所以我可能无法立即回答任何后续问题。请参阅 tl;dr 了解我的需求的最简单说明。

【问题讨论】:

  • “根据帖子 ID 将它们放入唯一命名的数组中” ~ 不要这样做。只需使用数组索引而不是尝试创建特殊命名的变量,即$post_vals = [49 =&gt; "fifa", 46 =&gt; "rio", etc]
  • “我向任何试图解开这个烂摊子的勇敢灵魂致敬,祝你好运。”轻描淡写。您的问题在概念上很简单,但却是一堵调试文本的墙。抱歉,但请将其归结为非常简单的内容:“这就是我所拥有的,这就是我想要的,这是我正在使用的代码。怎么了?”
  • @SuperCat tl;dr 在哪里?我只看到最后对它的引用。一般来说,你的漫无边际没有帮助。

标签: php mysql arrays loops


【解决方案1】:

当然可以,在这里(假设 $post_ids 是您在 OP 中声明的 post_id 数组),然后我可以假设我可以通过类似查询在类似数组中获取类别吗?

我不明白你为什么不能简单地这样做。

$post_id = array(49, 48, 47, 46, 43);

$result = array();
foreach($post_id as $id)
{
    //without knowing the data returned i cant write exact code, what is returned?
    $query = "SELECT category FROM post_categories WHERE post_id = $id";
    $cats =   fakeMarkup_executeQuery($query);

    if(!empty($cats)) { 
        if(!isset($result[$id])){
            $result[$id] = array();
        }
        foreach( $cats as $cat ){ 
              $result[$id][] => $cat;
        }
   }
}

输出应该是。

Array
(
    [49] => Array
        (
            [0] => fifa
        )

    [46] => Array
        (
            [0] => sports
            [1] => rio
            [2] => dolphins
        )

    [43] => Array
        (
            [0] => puppies
            [1] => trucks
        )

)

【讨论】:

    【解决方案2】:

    好的,假设你可以运行一个函数(我们称之为findselect)接受你的查询/ID并返回一个数组(列表行)的列名到值(行)的关联数组,试试这个...

    $post_categories = [];
    foreach ($post_id as $id) {
        $rows = select("SOME QUERY WHERE post_id = $id");
        /*
        for example, for $id = 46
        $rows = [
            ['category' => 'sports'],
            ['category' => 'rio'],
            ['category' => 'dolphins']
        ];
        */
        if ($rows) { // check for empty / no records found
            $post_categories[$id] = array_map(function($row) {
                return $row['category'];
            }, $rows);
        }
    }
    

    这将导致类似以下数组...

    Array
    (
        [49] => Array
            (
                [0] => fifa
            )
    
        [46] => Array
            (
                [0] => sports
                [1] => rio
                [2] => dolphins
            )
    
        [43] => Array
            (
                [0] => puppies
                [1] => trucks
            )
    
    )
    

    【讨论】:

    • 不幸的是,它不允许查询与任何不直接出包的函数配对,它们是:select、selectRow、insert、insertSelect、update、delete 和 deleteJoin。它们应该是不言自明的。尽管如此,这是一个不错的方法,但不幸的是它不起作用。
    • @SuperCat 显然我不知道,因为您没有将它包含在您的问题中。当然,您可以在我的回答中将 find 替换为 select,我只能假设它会做同样的事情
    猜你喜欢
    • 2014-01-08
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 2023-04-09
    • 2015-07-24
    • 1970-01-01
    相关资源
    最近更新 更多