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ä?
Oliko tämä hankala tai tyhmä kysymys?
Esittämäsi tapa on ihan kelvollinen, tosin jos käsitin tarkoituksesi oikein, taulukon voi muodostaa helpommin seuraavasti:
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
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
Osaisiko kukaan sanoa onko toinen tapa erityisesti toista parempi?
Joka esittää kysymyksen, on minuutin ajan typerys.
Aihe on jo aika vanha, joten et voi enää vastata siihen.