Php SQL内连接?

时间:2015-04-13 20:43:17

标签: php sql

所以,我正在建立一个投资组合网站,我可以发布和编辑博客。

我正在制作博客编辑页面,而我在将两张桌子组合在一起时遇到了麻烦。

第一个表适用于博客,第二个表包含所有不同的博客类别。

以下是我收到博文的方式:

$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>

2 个答案:

答案 0 :(得分:0)

您需要为select(option)元素设置所选属性,如下所示:

<?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>"; 
    }
?>

答案 1 :(得分:0)

您有两种选择:

selected循环中添加带有if条件的foreach属性:

foreach ($categories as $cat) {
    echo '<option';
    if ($cat['category_id'] == $post['category_id']) echo ' selected';
    echo '>'.$cat['category_name'].'</option>';
}

或在帖子INNER JOIN查询中使用SELECT

$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元素作为&#34;当前选中的默认值&#34;选项:

      <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。请注意,如果可以将类别设置为帖子,则应使用LEFT JOIN代替并{{1}将第一个option元素输出包裹起来不是空的。