【问题标题】:Three sql queries into one三个sql查询合二为一
【发布时间】:2016-11-18 07:15:42
【问题描述】:

我有以下问题。我需要为此结果创建分页。对于创建分页,我只需要一个 while 循环(一个 sql 查询)。由于响应式 div,现在我有三个查询。我需要保留这三个 div。有什么想法吗?

谢谢。

<div class="col-md-4 col-sm-12">
    <?php
        require 'db.php';
        mysql_query("SET NAMES utf8");
        $query = "SELECT * FROM dot where schva=1 order by id desc";
        $result = mysql_query($query) or die(mysql_error());

        $item_num = 0;
        $num_records = mysql_num_rows($result);
        while ($row = mysql_fetch_array($result)) {
            if ($item_num % 3 == 0) {
                echo '<div class="box1 space30">
                  <div class="media">
                      <div class="media-left">
                         <a href="dot/' . $row['id'] . '">
                          <img  src="img/chat.png" alt="...">
                        </a>
                      </div>
                      <div class="media-body">
                       <p><a href="dot/' . $row['id'] . '" style="color:white;">' . $row['text'] . '</a></p>
                      </div>
                    </div>

                    <div class="divider space20"></div>

                    <div class="txt">
                      <p>' . $row['nad'] . '</p>
                    </div>
                </div>';
            } ?>
            <?php
            $item_num++;
        }
    ?>
</div>
<div class="col-md-4 col-sm-12">
    <?php
        require 'db.php';
        $query = "SELECT * FROM dot where schva=1 order by id desc";
        $result = mysql_query($query) or die(mysql_error());
        $item_num = 0;
        $num_records = mysql_num_rows($result);
        while ($row = mysql_fetch_array($result)) {
            if ($item_num % 3 == 1) {
                echo '<div class="box1 space30">
                  <div class="media">
                      <div class="media-left">
                         <a href="dot/' . $row['id'] . '">
                          <img  src="img/chat.png" alt="...">
                        </a>
                      </div>
                      <div class="media-body">
                        <p><a href="dot/' . $row['id'] . '" style="color:white;">' . $row['text'] . '</a></p>
                      </div>
                    </div>

                    <div class="divider space20"></div>

                    <div class="txt">
                      <p>' . $row['nad'] . '</p>
                    </div>
                </div>';
            } ?>
            <?php
            $item_num++;
        }
    ?>
</div>

<div class="col-md-4 col-sm-12">
    <?php
        require 'db.php';
        $query = "SELECT * FROM dot where schva=1 order by id desc";
        $result = mysql_query($query) or die(mysql_error());
        $item_num = 0;
        $num_records = mysql_num_rows($result);
        while ($row = mysql_fetch_array($result)) {
            if ($item_num % 3 == 2) {
                echo '<div class="box1 space30">
                  <div class="media">
                      <div class="media-left">
                        <a href="dot/' . $row['id'] . '">
                          <img  src="img/chat.png" alt="...">
                        </a>
                      </div>
                      <div class="media-body">
                        <p><a href="dot/' . $row['id'] . '" style="color:white;">' . $row['text'] . '</a></p>
                      </div>
                    </div>

                    <div class="divider space20"></div>

                    <div class="txt">
                      <p>' . $row['nad'] . '</p>
                    </div>
                </div>';
            } ?>
            <?php
            $item_num++;
        }
    ?>
</div>

【问题讨论】:

  • 你需要使用 mysqli_* 而不是 mysql_*。
  • 谢谢。有什么不同的解决方案吗?
  • 你需要重新组织所有的代码。首先,您多次“要求” db.php。你只需要一次。其次,您一直在使用相同的查询。为什么你不使用一次,一次完成所有逻辑?
  • @NeelThakkar 回答你的问题 :)

标签: php sql merge pagination


【解决方案1】:

你可以试试这个代码,它很有帮助。首先使用mysqli进行查询。

<div class="col-md-4 col-sm-12">
    <?php
        require 'db.php';
        mysql_query("SET NAMES utf8");
        $query = "SELECT * FROM dot where schva=1 order by id desc";
        $result = mysql_query($query) or die(mysql_error());

        $item_num = 0;
        $num_records = mysql_num_rows($result);
        while ($row = mysql_fetch_array($result)) {
            if ($item_num % 3 == 0) {
                //Code
            }elseif($item_num % 3 == 1){
                //Code
            }elseif($item_num % 3 == 2){
                //Code
            }

            $item_num++;
        }
    ?>
</div>

【讨论】:

  • 谢谢。实际上,我需要这样的东西:&lt;div class="col-md-4 col-sm-12"&gt; //code &lt;/div&gt; &lt;div class="col-md-4 col-sm-12"&gt; //code &lt;/div&gt; &lt;div class="col-md-4 col-sm-12"&gt; //code &lt;/div&gt;
【解决方案2】:

或者你可以尝试使用 PDO:

版本取决于数据库中的记录:

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sth = $pdo->prepare("SELECT * FROM dot");
$sth->execute();
$data = $sth->fetchAll(PDO::FETCH_ASSOC);
?>
<?php $item_num = 0; ?>

<?php foreach ($data as $row): ?>
    <div class="col-md-4 col-sm-12">
        <?php if ($item_num % 3 == 0): ?>
        <?php endif; ?>

        <?php if ($item_num % 3 == 1): ?>
        <?php endif; ?>

        <?php if ($item_num % 3 == 2): ?>
        <?php endif; ?>

        <?php $item_num++; ?>
    </div>
<?php endforeach; ?>

div 数量固定的版本:

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sth = $pdo->prepare("SELECT * FROM dot");
$sth->execute();
$data = $sth->fetchAll(PDO::FETCH_ASSOC);
?>

<?php for ($i = 0; $i < 3; $i++): ?>
    <?php $item_num = 0; ?>
    <div class="col-md-4 col-sm-12">
        <?php foreach ($data as $row): ?>

            <?php if ($item_num % 3 == 0): ?>
            <?php endif; ?>

            <?php if ($item_num % 3 == 1): ?>
            <?php endif; ?>

            <?php if ($item_num % 3 == 2): ?>
            <?php endif; ?>

            <?php $item_num++; ?>
        <?php endforeach; ?>
    </div>
<?php endfor; ?>

【讨论】:

  • 谢谢,但我需要保留三个 div 类 col-md-4 col-sm-12。不止一个。
  • 添加到您的问题中我想以 HTML 格式输入
  • 我需要这样的东西:&lt;div class="col-md-4 col-sm-12"&gt; //while&lt;/div&gt; &lt;div class="col-md-4 col-sm-12"&gt; //while&lt;/div&gt; &lt;div class="col-md-4 col-sm-12"&gt; //while&lt;/div&gt;
  • 如果这个值是固定的还是和表中的记录一样多?
  • 这只有三个div必须固定。
【解决方案3】:

希望它会有所帮助。

    $item_num = 0;
    $num_records = mysql_num_rows($result);
    while ($row = mysql_fetch_array($result)) {
        if ($item_num % 3 == 0) {
           echo '<div class="box1 space30">
              <div class="media">
                  <div class="media-left">
                     <a href="dot/' . $row['id'] . '">
                      <img  src="img/chat.png" alt="...">
                    </a>
                  </div>
                  <div class="media-body">
                    <p><a href="dot/' . $row['id'] . '"
       style="color:white;">' . $row['text'] . '</a></p>
                  </div>
                </div>

                <div class="divider space20"></div>

                <div class="txt">
                  <p>' . $row['nad'] . '</p>
                </div>
            </div>';
        }elseif($item_num % 3 == 1){
           echo '<div class="box1 space30">
              <div class="media">
                  <div class="media-left">
                     <a href="dot/' . $row['id'] . '">
                      <img  src="img/chat.png" alt="...">
                    </a>
                  </div>
                  <div class="media-body">
                    <p><a href="dot/' . $row['id'] . '" 

                    style="color:white;">' . $row['text'] . '</a></p>
                  </div>
                </div>

                <div class="divider space20"></div>

                <div class="txt">
                  <p>' . $row['nad'] . '</p>
                </div>
            </div>';
        }elseif($item_num % 3 == 2){
           echo '<div class="box1 space30">
              <div class="media">
                  <div class="media-left">
                     <a href="dot/' . $row['id'] . '">
                      <img  src="img/chat.png" alt="...">
                    </a>
                  </div>
                  <div class="media-body">
                    <p><a href="dot/' . $row['id'] . '" 
                 style="color:white;">' . $row['text'] . '</a></p>
                  </div>
                </div>

                <div class="divider space20"></div>

                <div class="txt">
                  <p>' . $row['nad'] . '</p>
                </div>
            </div>';
        }

        $item_num++;
    }
?>

【讨论】:

  • 谢谢。实际上,我需要这样的东西:&lt;div class="col-md-4 col-sm-12"&gt; //code &lt;/div&gt; &lt;div class="col-md-4 col-sm-12"&gt; //code &lt;/div&gt; &lt;div class="col-md-4 col-sm-12"&gt; //code &lt;/div&gt;
猜你喜欢
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 2014-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多