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

时间:2016-03-09 10:47:26

标签: 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;
}

控制器

<?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语句使我想要的数据出现在每个标签中而不影响所有其他标签?

任何建议都很棒。

1 个答案:

答案 0 :(得分:0)

您可以添加一些名称为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;
}

在您的app控制器中,您只能找到所需的monachies:

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

或者您可以在app控制器和应用视图中找到所有君主制,您可以查看所有型号的MonarchyType并仅显示相应的型号