Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: MySQL kysely useasta taulusta

seppe [12.08.2010 17:29:47]

#

Jos otan esimerkki tilanteen Ohjelmointiputkan MySQL oppaasta

MySQL ja PHP: Osa 9 - Monta taulua

Miten kannattaa toteuttaa tilanne, kun halutaan saada selville tuotteet jotka ovata olleet viikon tuotteina sekä viikot.

Yksi tapa joka tuli mieleen on tehdä kysely tuotetaulusta ja liittää (JOIN) se tarjoustauluun ja kaydä PHP skriptin avulla läpi kaikki rivit ja yhdistää rivit joilla on sama id niin, että viikot tallennetaan esim taulukkoon.

Esimerkki

<?php
...

$tuotteet = array();
$id       = -1;

while( $rivi = mysql_fetch_array( $haku, MYSQL_ASSOC ) )
{
    if ( $id != $rivi['id'] )
    {
        $id = $rivi['id'];
        $tuote =& tuotteet[];
        $tuote = $rivi;
        $tuote['viikko'] = array( $tuote['viikko'] );
        continue;
    }
    if ( isset($rivi['viikko']) )
        $tuote['viikko'][] = $rivi['viikko'];

}

...
?>

Onko olemassa parempia mentelmiä toteuttaa tämä?

seppe [13.08.2010 17:48:18]

#

Oliko tämä hankala tai tyhmä kysymys?

Metabolix [13.08.2010 17:56:34]

#

Esittämäsi tapa on ihan kelvollinen, tosin jos käsitin tarkoituksesi oikein, taulukon voi muodostaa helpommin seuraavasti:

<?php
$tuotteet = array();
while ($rivi = ...) {
  $tuotteet[$rivi["id"]][] = $rivi["viikko"];
}

Jos jostain syystä on välttämättä tarpeen saada vain yksi tulosrivi joka tuotteelle, viikot voi yhdistää funktiolla GROUP_CONCAT suunnilleen seuraavasti:

SELECT tuote, GROUP_CONCAT(viikko) AS viikot FROM alennukset GROUP BY tuote

seppe [13.08.2010 19:15:08]

#

Tuolla GROUP_CONCATilla saatua riviä kannattaa varmaankin käsitellä esim. explodella.

Jos tarjous taulussa olisi vielä kenttä tarjous_id, niin onko hyvä tapa saada yksi rivi seuraavalla tavalla ja käyttää explode funktiota, vai kannataako mielummin käsitellä useat rivit PHPllä ensimmäisessä viestissä olevalla tavalla?

SELECT tuote, GROUP_CONCAT( CONCAT( tarjous_id , '|' ) viikko SEPARATOR ':' ) AS tarjoukset FROM alennukset GROUP BY tuote

seppe [17.08.2010 19:57:30]

#

Osaisiko kukaan sanoa onko toinen tapa erityisesti toista parempi?

manninen [17.08.2010 22:12:30]

#

Joka esittää kysymyksen, on minuutin ajan typerys.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta