簡體   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