我有 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/