次のデータベースクエリがあります。
$database = JFactory::getDBO();
$database->setQuery("SELECT items.headline, items.image, items.copy, items.source
FROM ms95f_createalist_items items
JOIN ms95f_createalist_categories categories
ON items.heading = " . $this->item->id);
$orderitems = $database->loadObjectList();
私はこれをhtmlで呼び出します:
<div class="feedList">
<?php
$count = 0;
foreach ($orderitems as $item) { ?>
<div class="feedItem">
<div class="number"> <?php echo $count; ?></div>
<div class="headline"> <?php echo $item->headline; ?></div>
<div class="image"> <?php echo $item->image; ?></div>
<div class="copy"> <?php echo $item->copy; ?></div>
<div class="source"> <?php echo $item->source; ?></div>
</div>
<?php $count++; } ?>
</div>
うまく機能していますが、各項目の出力を2回取得しています。私が間違っているアイデアはありますか?
カテゴリテーブルが結合されているため、アイテムが重複している可能性があります。また、実際にはカテゴリテーブルから何も選択しないので、次のようにしてください。
$database->setQuery("SELECT items.headline, items.image, items.copy, items.source
FROM ms95f_createalist_items items");
データを制限するために使用しているIDがある可能性もありますが、結合で使用しているがcategories
列を参照していないため、実際には意味がありません。 (ランダムな推測として、2つのカテゴリは今ですか?)
したがって、実際にIDで制限したい場合は、おそらく実際にWHERE
句が必要です。
$database->setQuery("SELECT items.headline, items.image, items.copy, items.source
FROM ms95f_createalist_items items
WHERE items.heading = " . $this->item->id");
Joomlaクエリビルダーメソッドを完全に採用し、結果セットの行インデックスを利用してカウンターを表示するために、ここに推奨されるスニペットを示します...
_$db = JFactory::getDBO();
$query = $db->getQuery(true)
->select(["headline", "image", "copy", "source"])
->from("#__createalist_items")
->where("heading = " . (int)$this->item->id);
$db->setQuery($query);
$orderitems = $db->loadObjectList();
_
SOURCE
はMySQLキーワードですが、RESERVEDキーワードではないため、バッククォートで囲む必要はありません。さらに言えば、どの列にも$db->quoteName()
を適用する必要はありません。テーブル名も同様です。
参照されるテーブルは1つだけなので、テーブルエイリアスは不要です。
データを表示するコードcouldは次のように記述します:
_<div class="feedList">
<?php
foreach ($orderitems as $index => $item) { ?>
<div class="feedItem">
<div class="number"> <?=($index + 1)?></div>
<div class="headline"> <?=$item->headline?></div>
<div class="image"> <?=$item->image?></div>
<div class="copy"> <?=$item->copy?></div>
<div class="source"> <?=$item->source?></div>
</div>
<?php
} ?>
</div>
_
または、phpの場合、繰り返しインとアウトを繰り返すことなく:
_<div class="feedList">
<?php
foreach ($orderitems as $index => $object) {
echo "<div class=\"feedItem\">";
echo "<div class=\"number\"> " , ($index + 1) , "</div>";
foreach ($object as $prop => $val) {
echo "<div class=\"{$prop}\"> {$val}</div>";
}
echo "</div>";
} ?>
</div>
_