Eräässä skriptissäni haen tietokannasta select-haulla sisäliitosta hyödyntäen kahdesta taulusta tietoja ja ne tulisi järjestellä ikäänkuin kategorioittain... En kuitenkaan keksi miten voisin välttää saman otsikon tulostamisen kahdesti, kun tulostan tiedot...
Eli nyt se tekee näin:
Kirjailijat: Ilkka Remes Kirjailijat: Arto Paasilinna
kun sen pitäisi...
Kirjailijat: Ilkka Remes Arto Paasilinna
Toivottavasti ymmärsitte kysymykseni...
Tekisiköhän UNION sen mitä haluat?
taulu a: +------+ | x | +------+ | foo | +------+ taulu b: +------+ | x | +------+ | bar | | baz | +------+ SELECT x FROM a UNION SELECT x FROM b; +------+ | x | +------+ | foo | | bar | | baz | +------+
Vai haitko takaa jotain aivan muuta?
En tarkoittanut ihan tuota... Täytynee selittää paremmin. Eli siis taulu rakenne on tällänen:
taulu: menu +----+---------------+ | id | category_name | +----+---------------+ | 1 | Kirjailijat | | 2 | Ohjaajat | +----+---------------+ taulu: tiedot +----+------------+-------------+ | id | nimi | category_id | +----+------------+-------------+ | 1 | Remes | 1 | | 2 | Paasilinna | 1 | | 3 | Hitchcock | 2 | +----+------------+-------------+
Haen ne tiedot siis tällä hetkellä
seuraavasti: SELECT category_name, nimi FROM menu, tiedot WHERE category_id = menu.id
Siinä vaiheessa kun tulostan tiedot while-rakenteella, niin ne tulostuvat:
Kirjailijat: Remes Kirjailijat: Paasilinna Ohjaajat: Hitchcock
Haluaisin tulostaa saman
kategorian nimen vain kerran:
Kirjailijat: Remes Paasilinna Ohjaaja: Hitchcock
Eli jospa nyt selkeni...
Lisää hakuun ORDER BY category_id
tms, ja tarkista tulostusvaiheessa, oliko edellisen tulostetun asian kategoria sama.
Vaihtoehtoisesti voit luoda arrayn, jossa kategorian nimi toimii päätason elementtinää, esim.:
$tiedot = array(); for($i = 0, $maxi = $lähdemäärä; $i < $maxi; $i++) { $tiedot[ $lähde[$i]['category_name'] ][] = $lähde[$i]['nimi']; }
Tämä lähinnä tekee tulostusvaiheen vähän luettavammaksi (kai, mielipideasia lienee).
Ongelma ratkaistu, kiitos avusta!
Aihe on jo aika vanha, joten et voi enää vastata siihen.