[英]Php SQL inner join?
因此,我正在制作一个投资组合网站,可以在其中发布和编辑博客。
我正在制作博客编辑页面,但无法将两个表组合在一起。
第一个表用于博客, 第二个表包含所有不同的博客类别。
这是我获取博客文章的方式:
$qStr = "SELECT post_title, post_content, post_description, post_active, category_id FROM posts WHERE post_id = {$post_id}";
这是我获取博客类别的方法:
$qStr = "SELECT category_name FROM categories WHERE category_id = {$category_id}";
因此,在我的编辑博客文章页面中,我有一个下拉框,我需要显示该博客文章所在的类别并进行更改。 我的博客表中有一个category_id。 我的问题是如何获得下拉菜单以显示帖子所属的类别?
现在,我的下拉代码看起来像这样(注意:现在,我只是用所有类别填充下拉列表)
<div class="form-group">
<label for="categorySelect" class="col-lg-2 control-label">Category</label>
<div class="col-lg-3">
<select class="form-control" id="categorySelect">
<?php
foreach ($categories as $cat) {
echo("<option>{$cat['category_name']}</option>");
}
?>
</select>
</div>
</div>
您需要为select(option)元素设置selected属性,如下所示:
<?php
foreach ($categories as $cat) {
if ($cat['category_name'] == $category_of_your_post)
echo "<option selected=\"selected\">{$cat['category_name']}</option>";
else
echo "<option>{$cat['category_name']}</option>";
}
?>
顺便说一句,我认为您的查询有误(如果我正确理解您的问题)。 基本上,您需要检索帖子的category_id并针对类别数组执行相等性问题:
$qStrBlog = "SELECT post_title, post_content, post_description, post_active, category_id FROM posts WHERE post_id = {$post_id}";
$qStrCat = "SELECT category_id, category_name FROM categories";
接着:
<?php
foreach ($categories as $cat) {
if ($cat['category_id'] == $blog_data['category_id'])
echo "<option selected=\"selected\">{$cat['category_name']}</option>";
else
echo "<option>{$cat['category_name']}</option>";
}
?>
您有两种选择:
在foreach
循环中添加带有if条件的selected
属性:
foreach ($categories as $cat) {
echo '<option';
if ($cat['category_id'] == $post['category_id']) echo ' selected';
echo '>'.$cat['category_name'].'</option>';
}
或在SELECT
查询后使用INNER JOIN
:
$qStr = "SELECT p.post_title, p.post_content, p.post_description, p.post_active, p.category_id, c.category_name FROM posts INNER JOIN categories c ON c.category_id = p.category_id WHERE post_id = {$post_id}";
并将第一个option
元素作为“默认当前选定”选项:
<select class="form-control" id="categorySelect">
<option value="<?= $post['category_id'] ?>"><?= $post['category_name'] ?> (current)</option>
<?php
foreach ($categories as $cat) {
echo("<option>{$cat['category_name']}</option>");
}
?>
</select>
我假设您已将第一个SELECT
查询的结果正确加载到$post
。 请注意,如果有可能不将Category设置为Post,则应改用LEFT JOIN
并包装取决于$post['category_id']
的第一个option
元素输出(不为空)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.