简体   繁体   English

如何缩短这部分代码?

[英]How can I make this part of code shorten?

I only know that this part of code is not good for performance web application because it spent a lot of time during execution two SQL query instead of one. 我只知道这部分代码对性能Web应用程序不利,因为它在执行过程中花费了很多时间使用两个SQL查询而不是一个。 I want to read your suggestions about this part of code. 我想阅读您对这部分代码的建议。 Also, I want to read your code solution of this. 另外,我想阅读您的代码解决方案。 The code is working ok. 该代码工作正常。

I appreciate your help. 我感谢您的帮助。

Thank you in advance 先感谢您

<html>
<body>
    <select name="category">
        <option value="category">category name</option>
        <?php
        $sql = "SELECT category.name as cat, article.name as art from category
        JOIN article ON category.id = article.id";
        $query = mysqli_query($conn, $sql);
        while($row = mysqli_fetch_array($query)){
        echo "
        <option value='".$row["cat"]."'>".$row["cat"]."</option>";
        }
        mysqli_close($conn);
        ?>
    </select>
    <select name="article">
        <option value="articlename">article name</option>
        <?php
        $sql = "SELECT category.name as cat, article.name as art from category
        JOIN article ON category.id = article.id";
        $query = mysqli_query($conn, $sql);
        while($row = mysqli_fetch_array($query)){
        echo "
        <option value='".$row["art"]."'>".$row["art"]."</option>";
        }
        mysqli_close($conn);
        ?>
    </select>
</body>
</html>

You don't need to make 2 connections to the db for getting the same data. 您无需与数据库建立2个连接即可获取相同的数据。 You could create a collection of objects and use them in place like such... 您可以创建对象的集合并像这样使用它们。

<?php
  $arr = [];

  $sql = "SELECT category.name as cat, article.name as art from category 
  JOIN article ON category.id = article.id";

  $query = mysqli_query($conn, $sql);

  while($row = mysqli_fetch_array($query)){
      $obj = (object) [
          "cat" => $row["cat"],
          "art" => $row["art"]
      ];

      array_push($arr, $obj);
  }

  mysqli_close($conn);
?>

<select name="category">
<option value="category">category name</option>
foreach($arr as $obj) {
    ?>
        <option value='"<?php echo $obj->cat; ?>"'><?php echo $obj->cat; ?></option>
    <?php
}

<select name="article">
<option value="articlename">article name</option>
foreach($arr as $obj) {
    ?>
        <option value='"<?php echo $obj->art; ?>"'><?php echo $obj->art; ?></option>
    <?php
}

You can prepare the strings that will hold the <option> in 1 loop, then simply echo them. 您可以准备在1个循环中保存<option>的字符串,然后简单地回显它们。

In example : 例如:

<?php
$sql = "SELECT category.name as cat,
               article.name as art
        FROM category 
        JOIN article
        ON category.id = article.id";
$query = mysqli_query($conn, $sql);
$articles = "";
$categories = "";
while($row = mysqli_fetch_array($query)) {
    $categories .= "<option value='" . $row["cat"] . "'>" . $row["cat"] . "</option>";
    $articles .= "<option value='" . $row["art"] . "'>" . $row["art"] . "</option>";
}
mysqli_close($conn);
?>
<select name="category">
    <option value="category">category name</option>
    <?php echo $categories; ?>
</select>
<select name="article">
    <option value="articlename">article name</option>
    <?php echo $articles; ?>
</select>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM