PHP:すべての組合制限と同じ行の値を表示する
質問
<?
// Connect database
include("cat-config.php");
// Get all records in all columns from table and put it in $result.
$result=mysql_query("
(select * from stok_lukisan where `Ukuran` LIKE '20x25' AND `Kategori` LIKE '1' ORDER BY `Kode` ASC limit 3)
union all
(select * from stok_lukisan where `Ukuran` LIKE '30x40' AND `Kategori` LIKE '1' ORDER BY `Kode` ASC limit 4)
union all
(select * from stok_lukisan where `Ukuran` LIKE '20x50' AND `Kategori` LIKE '1' ORDER BY `Kode` ASC limit 5)
");
/*Split records in $result by table rows and put them in $row.
Make it looping by while statement. */
while($row=mysql_fetch_assoc($result)){
echo '<table><tr>';
echo "<td align='center'>$row[Kode]<br><a href='$GAMBAR_URL/$row[Gambar]' rel='lightbox' title='Kode Lukisan: $row[Kode]'><img src='$GAMBAR_URL/$row[Gambar]'><br>
Rp.$row[Harga]<a href=\"javascript:;\" onclick=\"simpleCart.add('name=$row[Kode]', 'price=$row[Harga]','size=tiny','quantity=1','thumb=$GAMBAR_URL/$row[Gambar]');\"><br><img src='./images/buy.gif'><p></a>";
$rows = 1;
while ($row = mysql_fetch_assoc($result)) {
echo "<td align='center'>$row[Kode]<br><a href='$GAMBAR_URL/$row[Gambar]' rel='lightbox' title='Kode Lukisan: $row[Kode]'><img src='$GAMBAR_URL/$row[Gambar]'></a><br>
Rp.$row[Harga]<a href=\"javascript:;\" onclick=\"simpleCart.add('name=$row[Kode]', 'price=$row[Harga]','size=tiny','quantity=1','thumb=$GAMBAR_URL/$row[Gambar]');\"><br><img src='./images/buy.gif'><p></a>";
++$rows;
if ($rows %4 == 0) {
echo '</tr><tr></tr>
</table></tr><tr><table><tr>';
}
}
}
?>
連合全土に設定された制限に従って、PHPループのすべての行でページに表示する方法。
このようなPHPページの結果:
1001 - 1002 - 1003 (<---- 3 record on rows)
2001 - 2002 - 2003 - 2004 (<---- 4 record on rows)
3001 - 3002 - 3003 - 3004 - 3005 (<---- 5 record on rows)
ありがとう....
解決
シンプルなカウンターを使用して、フェッチされた行を追跡できます。
$limits = array(3, 4, 5);
reset($limits);
$counter = 0;
while ($row = mysql_fetch_array($result)) {
var_dump($row);
$counter++;
if ($counter === current($limits)) {
echo current($limits);
next($limits);
$counter = 0;
}
}
ここ current
内部配列ポインターが指している現在の値を取得するために使用されます。したがって、現在の制限がフェッチされた行の数に等しい場合、制限は印刷されます、ポインターは高度になります(参照を参照 next
)そして、カウンターは0にリセットされます。
他のヒント
クエリを単純化して、これをPHPのために単純化できると思います。
SELECT
GROUP_CONCAT(name SEPARATOR ' - ') names,
FROM
stock
WHERE
category
AND size IN (25, 30, 45)
GROUP BY
size
これにより、PHPのようにMySQLデータがフォーマットされます。各行を印刷するだけです。
$sql = "( select *, 3 AS limit
from stock
where `size` LIKE '25'
AND `category` LIKE '1'
ORDER BY `code` ASC
limit 3)
union all
( select *, 4 AS limit
from stock
where `size` LIKE '30'
AND `category` LIKE '1'
ORDER BY `code` ASC
limit 4)
union all
( select *, 5 AS limit
from stock
where `size` LIKE '45'
AND `category` LIKE '1'
ORDER BY `code` ASC
limit 5)";
$res = mysql_query($sql);
while ($r = mysql_fetch_object($res)) {
// assuming each record has a unique id
$data[$r->limit][$r->id] = $r->name;
}
foreach ($data as $limit => $names) {
echo implode(' - ',$names);
}
所属していません StackOverflow