php - 如何使用主键从表中选择多个数据?

标签 php mysql pdo foreach

嗨,我目前正在制作一个微型网站,我终于可以处理来自数据库的数据并在我需要的地方显示。我的微型网站都是关于英国历史上不同君主的。我正在使用引导选项卡来显示英国历史上的每栋房屋。如下图所示。

Screenshot of Site

然而,第一部分我没有问题,但在“丹麦”选项卡中,我只有 3 个君主与这座房子相关,但当我尝试创建一个新功能来满足这一需求时,它会影响所有选项卡。

型号

public function fetchAll() {
    $sqlQuery = 'SELECT * FROM monarchy WHERE MonarchyID BETWEEN 1 AND 18';
    $statement = $this->_dbHandle->prepare($sqlQuery);
    $statement->execute();

    $dataSet = [];
    while($row = $statement->fetch()) {
        $dataSet[] = new MonarchData($row);
    }
    return $dataSet;
}

模型中的丹麦函数

public function fetchDenmark() {
    $sqlQuery = 'SELECT * FROM monarchy WHERE MonarchyID BETWEEN 19 AND 21';
    $statement = $this->_dbHandle->prepare($sqlQuery);
    $statement->execute();

    $dataSet = [];
    while($row = $statement->fetch()) {
        $dataSet[] = new MonarchData($row);
    }
    return $dataSet;
}

Controller

<?php
require_once('Model/MonarchData.php');
require_once('Model/MonarchDataSet.php');

session_start();
$view = new stdClass();
$view->pageTitle = 'Brit Monarch';

$monarchDataSet = new MonarchDataSet();
$view->MonarchDataSet = $monarchDataSet->fetchAll();


require_once('View/monarchy.phtml');

HTML

<div id="monarchContainer">
    <?php
    foreach ($view->MonarchDataSet as $MonarchDataSet) {
        ?>
        <div id="monarch">
            <div class="panel panel-default">
                <div class="panel-heading">
                    <h3 class="panel-title" 
                        style="font-family:  fantasy; font-style:  initial; font-weight: lighter; text-align: center;">
                        <?php echo '<p>' . $MonarchDataSet->getMonarch() . '</p>'; ?>
                    </h3>
                </div>
                <div class="panel-body">
                    <?php
                    ?>

                </div>
            </div>
        </div>

    <?php } ?>
</div>
</div>

如何使用 foreach 语句使我想要的数据出现在每个选项卡中而不影响所有其他选项卡?

任何建议都会很棒。

最佳答案

您可以添加一些名为 MonarchyType 的列:

ALTER TABLE monarchy add COLUMN MonarchyType TEXT;

因此,您的模型可能有一种方法来查找所有君主制或仅按 MonarchyType 查找部分君主制:

public function fetchAll($type = false) {
    if(!$type) {
        $sqlQuery = 'SELECT * FROM monarchy';
        $statement = $this->_dbHandle->prepare($sqlQuery);
    } else {
        $sqlQuery = 'SELECT * FROM monarchy WHERE MonarchyType = :MonarchyType';
        $statement = $this->_dbHandle->prepare($sqlQuery);
        $statement->bindValue(':MonarchyType', $type);
    }

    $statement->execute();

    $dataSet = [];
    while($row = $statement->fetch()) {
        $dataSet[] = new MonarchData($row);
    }
    return $dataSet;
}

在您的应用程序 Controller 中,您只能找到所需的 monachie:

$view->MonarchDataSet = $monarchDataSet->fetchAll('Danish');

或者您可以在应用 Controller 中找到所有君主制,并在应用 View 中检查所有模型的 MonarchyType 并仅显示适当的模型

关于php - 如何使用主键从表中选择多个数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35889380/

相关文章:

php - Mysql if duplicate UNIQUE KEY update Hits

javascript - Vue.js - 具有两个行跨度的组件

php - Paypal 运输详细信息中的未定义索引

Mysql 一张表与多张表进行JOIN

php - PDOStatement::bindParam() 未从 MySQL 插入设置 AI 值?

php - SQL 和不区分大小写的条件

php - 如何在 Javascript 和 PHP 中验证非英语(UTF-8)编码的电子邮件地址?

php - 搜索 MySQL 数据

mysql - 在 MySQL 中调试 INNER JOIN

php - 使用 LIKE 和 = 的组合过滤多列