1

我的网站上有一个页面,用于编辑我的 CMS 中的文章。我的网站目前有两个不同的sql声明,我想知道是否有更好的方法来做到这一点?我正在做的是使用第一条语句来填充表单中的所有字段,但我使用第二条语句来select输入类别,所以我可以loop在这里使用不同options的代码,基本上我想知道是否还有其他事情要做这只有 1 条sql声明,非常感谢!

表类别

cat_id  cat_name
1       soccer
2       baseball
3       baketball

表文章

art_id  art_cat_id  art_title  art_slug  art_company  
1       1           lorem      lorem     lorem

HTML / PHP

<?php
 $sql_articles = "SELECT art_id, art_cat_id, art_title, art_slug, art_company, cat_id, cat_name
                FROM app_articles LEFT JOIN app_categories
                ON app_articles.art_cat_id = app_categories.cat_id
                WHERE art_id =".$_GET['art_id']; 

$result = query($sql_articles);
if($result===false) {
    echo("query failed");
}
else {
    $row = mysqli_fetch_array($result)              
?>

<form id="articles" action="" method="post">

<input type="text" name="title" value="<?php echo $row['art_title']; ?>">

<input type="text" name="slug" value="<?php echo $row['art_slug']; ?>"> 

<input type="text" name="company" value="<?php echo $row['art_company']; ?>">

<select name="category">
    <option value="<?php echo $row['art_cat_id'] ?>" selected="selected"><?php echo $row['cat_name'] ?></option>
    <?php
    $sql_categories = "SELECT cat_id, cat_name FROM app_categories";

    $result = query($sql_categories);

    if($result===false) {
            echo("Query Fail");
    }
    else {
        while( $data = mysqli_fetch_array($result)) {
            if ($row['art_cat_id'] == $data['cat_id']) continue;
    ?>     
            <option value="<?php echo $data['cat_id'] ?>"><?php echo $data['cat_name'] ?></option>
    <?php
        }
    }
?>
</select>

<input type="submit" value="Save">
</form>
<?php
    }
?>

我的第一个声明返回

art_id  art_cat_id  art_title  art_slug  art_company cat_id  cat_name
1       1           lorem      lorem     lorem       1       soccer

我想我需要的是这样的东西

art_id  art_cat_id  art_title  art_slug  art_company cat_id  cat_name
1       1           lorem      lorem     lorem       1       soccer
                                                     2       baseball
                                                     3       basketball

这甚至可以在一个查询中完成吗?谢谢

4

1 回答 1

1

如果您发现自己不断编写查询,这些查询使用相同的子句从同一个表中提取信息where,那么您可以生成一条语句,一次性将所有相关数据从数据库中提取出来。然后使用

$Statement->data_seek(0); // Returns to the first row

重新使用您的声明。前提是您没有签发:

$Statement->close();

但来自你的评论。我引用:

@DarylGill 这就是我的想法,但我遇到的问题是我正在使用WHERE art_id =._GET['art_id']它,这将我的结果限制为仅用于文章的类别,这就是为什么我做了第二条语句,以便我可以获得所有记录并循环它们。有没有更好的解决方法,谢谢!

通过使用关联数组,有一些选项:

$Var = mysqli_fetch_array($result, MYSQLI_ASSOC);

然后执行

print_r($Var);

您会注意到数组键名将匹配 MySQL 表中的列名。

从这里你可以使用你认为合适的这个数组,使用一个简单的:

foreach ($Var AS $Keys => $Value)
{
  if ($Keys == 'CatExample')
  {
    echo $Value; // This will output everyting with the keyname of 'CatExample'
  }
}

或其他方法,您可以通过实验找到。

于 2013-04-01T01:35:22.837 回答