我正在尝试创建一个项目列表,其中列表中的每四个项目都是来自纽约和On Sale的项目。列表中的其他项目是来自纽约的项目,无论它们是否在销售。
如何正确使用两个select语句将列表分解为我想要的顺序?以下是我现在正在使用的内容。它会创建一个段落列表,但不了解变量$article
和$article2
是什么。
<ul>
<?
$sort = id;
$sql = "SELECT * FROM `Catalog` WHERE state = 'New York' and in_stock = 'yes' ORDER BY $sort";
$result = mysql_query($sql);
$sql2 = "SELECT * FROM `Catalog` WHERE state = 'New York' and sale_item = 'yes' ORDER BY $sort ";
$result2 = mysql_query($sql2);
$i = 0;
while ( $article = mysql_fetch_array($result) || $article2 = mysql_fetch_array($result2) ) {
if ($i == 0) {
echo '<li>This item number is on sale:'.article2[id]. '</li>';
$i++;
} else if ($i == 3) {
echo '<li>This item number is regular price'.article[id]. '</li>';
$i = 0;
} else {
echo '<li>This item number is regular price'.article[id].'</li>';
$i++;
}
}
?>
</ul>
基于戴夫的建议,我正在尝试这种方式。但是php仍然不知道如何解释$ itemsOnSale或$ items。
<ul>
<?
$items = array();
$itemsOnSale = array();
$sql = "SELECT * FROM `Catalog` WHERE state = 'New York' AND in_stock = 'yes' ORDER BY $sort";
$result = mysql_query($sql);
while ( $row = mysql_fetch_assoc($result) ) {
if ( $row['sale_item'] == 'yes' ) {
$itemsOnSale[] = $row;
} else {
$items[] = $row;
}
if ($i == 0) {
echo '<li>This item number is on sale:'.$itemsOnSale[id]. '</li>';
$i++;
} else if ($i == 3) {
echo '<li>This item number is regular price'.$items[id]. '</li>';
$i = 0;
} else {
echo '<li>This item number is regular price'.$items[id].'</li>';
$i++;
}
}
?>
</ul>
答案 0 :(得分:1)
更好的方法是在单个查询中提取所有项目,将它们存储在单独的数组中,然后根据需要引用它们。在目前的形式中,您的第二个查询会提取销售商品,但不会检查它们是否有库存。
$items = array();
$itemsOnSale = array();
$sql = "SELECT * FROM `Catalog` WHERE state = 'New York' AND in_stock = 'yes' ORDER BY $sort";
$result = mysql_query($sql);
while ( $row = mysql_fetch_assoc($result) ) {
if ( $row['sale_item'] == 'yes' ) {
$itemsOnSale[] = $row;
} else {
$items[] = $row;
}
}
然后构建HTML列表,每隔4个循环从$ itemsOnSale中提取一个数组项。
答案 1 :(得分:0)
看起来您在变量名前面省略了$:
echo '<li>This item number is regular price'.article[id].'</li>';
应该
echo '<li>This item number is regular price'.$article[id].'</li>';
顺便说一句,看起来你正试图使用所谓的MARS - 多个活动结果集。并非所有数据库驱动程序都支持此功能。
答案 2 :(得分:0)
这是你的一个问题:
while ( $article = mysql_fetch_array($result) || $article2 = mysql_fetch_array($result2) ) {
如果从$result
找到结果,则会满足条件并且永远不会填充$article2
。您应该重新考虑while
循环的流程。
您可以尝试类似
的内容while ( $article = mysql_fetch_array($result) && $article2 = mysql_fetch_array($result2) ) {
但是,$article1
或$article2
为空后,这将完成。但是,您可以在之后添加另一个while
循环,只需
while( $article = mysql_fetch_array($result) ) { // keep posting regular items }
但是你有可能拥有比普通商品更多的促销商品(并且一切都不会被贴出来。)有很多方法可以做到这一点。
此外,您必须使用$
引用变量。
echo '<li>This item number is on sale:'.$article2['id']. '</li>';
您的原始代码中还有一个额外的结束括号,请检查您的解析。