【问题标题】:codeigniter model - return 2 sets of results - how to?codeigniter 模型 - 返回 2 组结果 - 如何?
【发布时间】:2012-06-19 08:34:21
【问题描述】:

我想做什么:

我有一个搜索框,可以搜索帖子或用户名或用户电子邮件。

帖子在一个表中,用户在另一个表中。

结构如下:

帖子

post_id 用户身份 邮政 发布日期 可见

用户

用户名 用户名 电子邮件 名 姓氏

现在,我正在我的模型中尝试以下代码:

<?php

 public function posts_that_match_search_term($search_term) {


$post_query = $this->db->query("SELECT * FROM posts,users WHERE post_message LIKE '%$search_term%' AND post_user_id=user_id  ORDER BY post_id DESC", array());

$post_query2 = $this->db->query("SELECT * FROM users WHERE user_username LIKE '%$search_term%' OR user_email LIKE '%$search_term%'  ORDER BY user_id DESC", array());


if ($post_query->num_rows() == 0) {
    return array();
} else {
    $i = 0;

    foreach ($post_query->result() AS $row) {
        $post_array[$i]["post_id"] = $row->post_id;
        $post_array[$i]["post_message"] = $row->post_message;

        $post_array[$i]["post_datetime"] = $row->post_datetime;
        $post_array[$i]["post_completion_status"] = $row->post_completion_status;
        $post_array[$i]["post_completion_date"] = $row->post_completion_date;
        $post_array[$i]["post_completion_notes"] = $row->post_completion_notes;
    }

    return $post_array;
}

if ($post_query2->num_rows() == 0) {
    return array();
} else {
    $a = 0;

    foreach ($post_query2->result() AS $row2) {

        $post_array2[$a]["user_id"] = $row2->user_id;
        $post_array2[$a]["user_name"] = $row2->user_name;
        $post_array2[$a]["user_username"] = $row2->user_username;
        $post_array2[$a]["user_image_filename"] = $row2->user_image_filename;
        $post_array2[$a]["user_first_name"] = $row2->user_first_name;
        $post_array2[$a]["user_last_name"] = $row2->user_last_name;
        $post_array2[$a]["user_email"] = $row2->user_email;





        $a++;
    }

    return $post_array2;
}
}

/* note = 为了简单起见,代码在某些地方被缩短 */

如果我一个一个地运行它们,两个查询都可以工作并返回结果。也就是说,如果我在 if ($post_query->num_rows() == 0) { 之后注释第一个查询和所有代码,那么代码的第二部分工作正常并返回结果。反之亦然。

任何帮助将不胜感激。

问候,卓然

当两者都未注释时,我没有收到任何错误,只有 0 个结果。

有人可以帮忙吗?

【问题讨论】:

    标签: codeigniter


    【解决方案1】:

    佐兰, 您必须进行一次查询以检查用户名或电子邮件。你知道如何进行这样的连接吗:

    $this->db->join('posts', posts.userid = users.userid');
    

    因此,您加入这两个表,然后在它们中搜索用户名或电子邮件。让我知道你的想法!

    【讨论】:

    • 嗨,Dirk,我需要 2 个查询。第一个查询中的用户 ID 只是为了获取发布帖子的用户。第二个查询应该检查某些用户名或电子邮件是否与搜索词匹配
    • 不,不是我看到的那样,或者你的方法是错误的......你想要的结果是什么?据我了解,您希望人们在搜索框中填写一些内容,并且您的函数搜索用户名或电子邮件并返回与该搜索词相对应的帖子,对吗?无论搜索词是用户名还是电子邮件地址,您都需要 1 个查询来搜索这两个表。
    • 因此,如果有人搜索 lorem ipsum...我希望显示包含 lorem ipsum 的帖子。但是,如果有名为 Lorem 的用户,我想要帖子和用户。首先:搜索结果:帖子,然后是包含搜索词的帖子。完成帖子后,在同一页面上我想要:搜索结果:人员以及所有用户名或电子邮件中包含 Lorem 的用户的数据
    • 啊,我明白了!那你不能做全文搜索吗?全文查询搜索表中出现的任何 $searchterm,您可以按帖子内容、用户名和电子邮件对它们进行分组。有关全文搜索和 codeigniter 的更多信息:joefreeman.co.uk/blog/2009/10/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多