[英]Multiple Select Statements
我正在尝试创建一个项目列表,其中列表中的每四个项目都是纽约和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>
根据Dave的建议,我正在尝试这种方式。 但是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>
更好的方法是在单个查询中提取所有项目,将它们存储在单独的数组中,然后根据需要引用它们。 在当前形式下,您的第二个查询会拉出销售商品,但不检查是否有库存。
$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中提取一个数组项。
好像您在变量名前面省略了$:
echo '<li>This item number is regular price'.article[id].'</li>';
应该为echo '<li>This item number is regular price'.$article[id].'</li>';
顺便说一句,您似乎正在尝试使用所谓的MARS-多个活动结果集。 并非所有的数据库驱动程序都支持此功能。
这是您的问题之一:
while ( $article = mysql_fetch_array($result) || $article2 = mysql_fetch_array($result2) ) {
如果从$result
找到$result
,则将满足条件,并且不会填充$article2
。 您应该重新考虑while
循环的流程。
您可以尝试类似
while ( $article = mysql_fetch_array($result) && $article2 = mysql_fetch_array($result2) ) {
但这将在$article1
或$article2
为空时完成。 但是您可以while
之后添加另一个while
循环,只需
while( $article = mysql_fetch_array($result) ) { // keep posting regular items }
但是您可能有比常规商品更多的销售商品(并且所有商品都不会发布。)有很多方法可以做到这一点。
另外,您必须使用$
引用变量。
echo '<li>This item number is on sale:'.$article2['id']. '</li>';
您的原始代码中还有一个额外的结束括号,请检查您的解析。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.