PHP: отображать значение строк одинаково со всеми лимитами объединения - PullRequest
1 голос
/ 09 октября 2010
<?
    // 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 в соответствии с лимитом, установленным в union all.

на странице php результат выглядит так:*

спасибо ....

Ответы [ 3 ]

1 голос
/ 09 октября 2010

Я думаю, что запрос можно упростить, чтобы упростить это и для PHP:

SELECT
   GROUP_CONCAT(name SEPARATOR ' - ') names,
FROM
   stock
WHERE
   category
   AND size IN (25, 30, 45)
GROUP BY
   size

Это даст вам данные MySQL, отформатированные так, как вы хотите в PHP. Вы можете просто напечатать каждую строку.

1 голос
/ 09 октября 2010

Вы можете использовать простой счетчик для отслеживания извлеченных строк:

$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.

0 голосов
/ 09 октября 2010
$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);
}
...