繁体   English   中英

PHP SQL内部联接?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM