PHP: filas indicación del valor límite mismo con toda la unión
Pregunta
<?
// 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>';
}
}
}
?>
cómo mostrar en la página con cada filas individuales de bucles php, de acuerdo con el límite que se ha establecido en la unión de todo.
en php resultado página como esta:
1001 - 1002 - 1003 (<---- 3 record on rows)
2001 - 2002 - 2003 - 2004 (<---- 4 record on rows)
3001 - 3002 - 3003 - 3004 - 3005 (<---- 5 record on rows)
Gracias ....
Solución
Se puede usar un simple contador para realizar un seguimiento de filas que se han exagerado:
$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
se utiliza para obtener el valor actual del puntero interno está apuntando. Así que si el límite actual es igual al número de filas que se han exagerado, se imprime el límite, el puntero es avanzada (ver next
) y el contador se pone a 0.
Otros consejos
Creo que la consulta se puede simplificar para simplificar esto también para PHP:
SELECT
GROUP_CONCAT(name SEPARATOR ' - ') names,
FROM
stock
WHERE
category
AND size IN (25, 30, 45)
GROUP BY
size
Esto obtendrá los datos de MySQL con formato como tú quieres que en PHP. Usted sólo puede imprimir cada fila.
$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);
}