mySQL更容易做多个语句的方法?

时间:2013-04-01 01:17:08

标签: php mysql sql mysqli

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

TABLE CATEGORIES

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

虽然在一个查询中甚至可以这样做吗?感谢

1 个答案:

答案 0 :(得分: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'
  }
}

或您通过实验找到的其他方法。