PHP Çıkışta grup verileri verimli bir yol arıyor

4 Cevap php

Ben ürünleri, varyasyonları tutan başka tutan bir tablo ve üçüncüsü tutun ürün çeşitleri (birçok ürün birçok varyasyonu .. her iki yönde olabilir) var. Ben (grubu tarafından) her ürün görüntülemek ve varyasyonlarını göstermek istiyorum.

ne okudum sadece aracılığıyla döngü ve yeni bir sonra çıkışını ayarlamak, eğer bir hangi kaydı görmek için id karşılaştırarak ... temiz görünmüyor.

4 Cevap

I think Tek bir ürün listesini ve tüm o en varyasyonları yapmak için bir yol arıyoruz. Ya da tüm ürünlerin bir listesini yapmak, ve sonra her ürün için, o ürünün her varyasyonu göstermek için.

Ben senin tablolar biraz böyle bakmak farz ediyorum:

product
    productId
    description

variation
    variationId
    description

productVariation
    productVariationId
    productId
    variationId

Tek bir ürün ve her şeyi en değişimler için iki iç birleşimler yapar aşağıdaki sorgu kullanabilirsiniz.

SELECT
    P.description as product,
    V.description as variation
FROM
    product as P,
INNER JOIN
    productVariation AS PV
    ON PV.productId = P.productId
INNER JOIN
    variation as V
    ON V.variationId = PV.variationId
WHERE
    P.productId = 1

For the whole list of products, just omit the WHERE clause. If a product has no variations, it won't be included in the list. If you want that, use LEFT JOINs instead.

Sorgu aşağıdaki dönecektir

product variation
shoe    blue
shoe    green
shoe    red
hat     green
hat     purple
hat     yellow
sock    white

Update:

Ben aşağıdaki gibi görüntülenen verileri istediğiniz tahmin ediyorum:

shoe
blue
green
red

hat
green
purple
yellow

sock
white

Yani şu PHP kodu ile yapılabilir.

$sql = "
    SELECT
        P.productId,
        P.description as product,
        V.description as variation
    FROM
        product as P,
    INNER JOIN
        productVariation AS PV
        ON PV.productId = P.productId
    INNER JOIN
        variation as V
        ON V.variationId = PV.variationId    
";

$result = mysql_query($sql);

//first put all the results into an array so we can look backward and 
//see previous items
$resultSet = array();
while($record = mysql_fetch_array($result)) {
    $resultSet[] = $record;
}

for ( $i = 0 ; $i < count($resultSet) ; $i++ ) {
    if ( $i == 0 ) {
        //for the first item, show the product name
        echo $resultSet[$i]['product'].'<br/>';
    } else if ($resultSet[$i]['productId'] != $resultSet[$i-1]['productId']) {
        //every time we encounter a new product
        //display a new line and show the product name
        echo '<br/>'.$resultSet[$i]['product'].'<br/>';
    }
    echo $resultSet[$i]['variation'].'<br/>';
}

Eğer SQL yazıyorsanız sizin seçimler ilk bağlıdır karşılaştırmalar veya birçok sorguları yapmak ya da bir sorgu vardır. Öte yandan, PHP için ADOdb sizin için bir-çok ilişkisi işleyebilir ActiveRecords vardır. http://phplens.com/lens/adodb/docs-active-record.htm#onetomany

Ben istediğiniz verileri göstermek için SQL değiştirme öneririm, orada bu şekilde elle verileri değiştirmek gerek olmalıdır. group by clause, ya da order by clause burada arkadaşı olabilir.

Ben bir önbelleğe alma Sytem kullanmayı tercih ediyorum.

No cache

alt text

Implementing The Cache in PHP

<?php
// start the output buffer
ob_start(); ?>

//Your usual PHP script and HTML here ...

<?php
$cachefile = "cache/home.html";
// open the cache file "cache/home.html" for writing
$fp = fopen($cachefile, 'w');
// save the contents of output buffer to the file
fwrite($fp, ob_get_contents());
// close the file
fclose($fp);
// Send the output to the browser
ob_end_flush();
?>

Using the cached files

<?php

$cachefile = "cache/home.html";

if (file_exists($cachefile)) {


    // the page has been cached from an earlier request

    // output the contents of the cache file

    include($cachefile); 


    // exit the script, so that the rest isnt executed
    exit;

}

?>