即使WHERE不匹配,MySQL JOINS也始终返回相同数量的结果

时间:2014-07-09 19:42:30

标签: mysql join jointable

对于令人困惑的标题感到抱歉,但有点难以解释。

我在MySQL中有三个表:zones(id, name)sellers(id, name)geopricings(id, zone [FK references zones.id], seller [FK references sellers.id], value)

每个卖家根据区域有不同的价格(geopricings.value)。

geopricings表格中,每个卖家应该有9行(共有9个区域),其中包含相应的值,如this,所以如果有10个卖家,我会有90行。

每当我从下拉列表中选择卖家时,我想创建一个包含9个价格输入的表单,如果卖家价格已经插入则填充,或者如果尚未插入卖家价格则为空。

如果已插入卖家价格,此查询将返回9行,但如果卖家不是(WHERE子句失败),则返回空集。

$getRows = $dbh->prepare("
    SELECT zones.*, geopricings.value 
    FROM zones LEFT JOIN geopricings ON zones.id = geopricings.zone 
    WHERE geopricings.seller = :seller
");

$getRows->execute(array( 'seller' => $_POST['seller'] ));

$rows = $getRows->fetchAll();

然后我会生成表格

<div id="geoZones" class="sizeTableQta zoneTable w100 cf">

    <?php foreach($rows as $zone): ?>
        <p>
            <input type="hidden" name="zone[]" class="input w50 fl" value="<?= $zone->id ?>">
            <span><?= $zone->name ?></span>
            <input type="text" name="value[]" class="input w50 fl" value="<?= $zone->value ?>">
        </p>
    <?php endforeach; ?>

</div>

因此,如果未插入卖家,则表单为空,但我想生成带有空输入的表单,以便我可以在地理位置表中插入新的卖家。

我知道问题出在查询中,所以我需要对其进行修改,以便它始终返回9行,无论seller.id是否已经在geopricings表中。

这听起来令人困惑,但如果难以理解,我会尝试进一步解释。

我希望你能帮助我。

谢谢。

0 个答案:

没有答案