php - 将一个表中的列连接到另一个表中的另一列 CodeIgniter

标签 php mysql sql codeigniter-3

我有 2 个表,我希望其中一些列在另一列从用户获取数据时自动更新。

这是我的场景:用户注册,他的详细信息转到“用户”表。 注册用户现在可以发帖了。当他发帖时,他的帖子会转到“帖子”表。

现在我想在他/她发帖时显示用户“用户名”。

因此,结论是我希望表“users”中的列“username”自动与表“posts”中的列“username”同步。因此,一旦用户发帖,它就会看到特定用户发了帖。

下面是我将如何实现它

<?php foreach ($posts as $post) : ?>

    <div class="row">
        <div  class="col-md-3">
            <img class="post-thumb img-fluid" src="<?php echo site_url(); 
?>assets/images/posts/<?php echo $post['post_image']; ?>">
        </div>
        <div class="col-md-9">
            <h3><?php echo $post['title'];?></h3>
            <small class="post-date">Posted on: <?php echo 
$post['created_at']; ?>
                in <strong><?php echo $post['category_name']?></strong> by 
<strong><?php echo $post['username']?></strong></small><br>
            <?php echo word_limiter($post['body'], 50); ?>
            <br><br>
            <p><a class="btn btn-info" href="<?php echo 
site_url('/posts/'.$post['slug']);?>"
                >Read More</a></p>
        </div>
    </div>

<?php endforeach; ?>

这是我尝试过的一个功能,但它不会在我发帖时更新我的​​“帖子”表列“用户名”。

public function get_posts($slug = FALSE){
    if ($slug === FALSE){
        $this->db->order_by('posts.id', 'DESC');
        $this->db->join('categories', 'categories.id = 
posts.category_id');
        $this->db->join('users', 'users.username = posts.username');
        $query = $this->db->get('posts');
        return $query->result_array();
    }

    $query = $this->db->get_where('posts', array('slug' => $slug));
    return $query->row_array();
    }

这是数据库表

CREATE TABLE `posts` (
  `id` int(11) NOT NULL,
  `category_id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `username` varchar(255) NOT NULL,
  `posted_by` varchar(255) NOT NULL,
  `title` varchar(255) NOT NULL,
  `slug` varchar(255) NOT NULL,
  `body` text NOT NULL,
  `post_image` varchar(255) NOT NULL,
  `created_at` datetime NOT NULL DEFAULT current_timestamp()
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE `users` (
  `id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `username` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `register_date` timestamp NOT NULL DEFAULT current_timestamp()
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

没有错误,只是没有结果。

任何建议或帮助将不胜感激。

编辑:

我已经成功创建了一个“get_username”函数。但我不确定为什么它不起作用以及如何为其创建一个循环以遍历已发布的帖子。请看下面的代码

public function get_username(){
    $username = $this->db->query("
          SELECT u.username AS username
          FROM users u
          LEFT JOIN posts p 
          ON u.id = p.user_id
          WHERE p.id = ?"
        , array('id')
    )->row_array();
    return $username['username'];
 }

我收到错误提示:

A PHP Error was encountered
Severity: Notice

Message: Undefined index: username

Filename: posts/index.php

Line Number: 19

最佳答案

您的 get_username() 方法不带任何参数 - 如果您想要获得 5 的 id 怎么办?还是 20?目前您无法指定要查询的 what id。当前查询,结果为:

LEFT JOIN posts p ON u.id = p.user_id WHERE p.id = 'id'

因为它传递的是字面上称为 id 的字符串,而您真正想要的是传递具有关联 ID 的参数以进行查询。

/**
 *
**/
public function get_username( int $userId )
{
    $username = $this->db->query("
          SELECT u.username AS username
          FROM users u
          LEFT JOIN posts p 
          ON u.id = p.user_id
          WHERE p.id = ?"
        , array( $userId )
    )->row_array();
    return $username['username'];
 }

关于php - 将一个表中的列连接到另一个表中的另一列 CodeIgniter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56876220/

相关文章:

php - 我的查询不起作用。我能做些什么?

php - 创建类似adwords的广告系统

sql - 如何检测一个字符串是否至少包含一个数字?

php - Mysql count 和 count distinct 在同一个查询中

javascript - 使用MySQL数据和PHP获取的Google图表?

MySQL 错误 : field is ambiguos (code 1052)

javascript - PHP中两个输入值相减并更新mysql数据库

java - 从 java.sql.Timestamp 获取公历日期

javascript - &lt;script&gt;未从给定的 map 地址 jquery 或 javascript 获取纬度和经度

php - 插入查询后如何基于两个表发送电子邮件?