我的网站上有一个页面,我用来编辑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
虽然在一个查询中甚至可以这样做吗?感谢
答案 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'
}
}
或您通过实验找到的其他方法。