GROUP BY ger dig en rad per grupp i resultatet, sedan kan du använda aggregate functions för att arbeta med datan inom dessa för att exempelvis summera värden, hitta min-/max-värden etc. MySQL har även GROUP_CONCAT för att skapa en kommaseparerad lista av de värden som ingår i gruppen, men den funktionen har en "bad smell" som vanligtvis antyder att man bör överväga en annan design, och i det här fallet hjälper det inte eftersom att raderna fortfarande skulle behöva behandlas utanför databasen: Du måste skriva kod som delar upp listorna/grupperna i rader igen för att kunna arbeta med dessa som enskilda bilder.
CREATE TABLE `galleri`
(
`id` INTEGER UNSIGNED NOT NULL,
`namn` VARCHAR(255) NOT NULL,
`grupp` VARCHAR(255) NOT NULL,
`bild` VARCHAR(255) NOT NULL,
UNIQUE INDEX (`id`)
);
INSERT INTO
`galleri`
(
`id`,
`namn`,
`grupp`,
`bild`
)
VALUES
(1, "test1", "grupp1", "bild1"),
(2, "test2", "grupp1", "bild2"),
(3, "test3", "ingen", "bild3"),
(4, "test4", "grupp2", "bild4"),
(5, "test5", "grupp2", "bild5"),
(6, "test6", "ingen", "bild6"),
(7, "test7", "ingen", "bild7");
SELECT
`grupp`,
GROUP_CONCAT(`id`) AS `id`,
GROUP_CONCAT(`namn`) AS `namn`,
GROUP_CONCAT(`bild`) AS `bild`
FROM
`galleri`
GROUP BY
`grupp`;
#
# +--------+-------+-------------------+-------------------+
# | grupp | id | namn | bild |
# +--------+-------+-------------------+-------------------+
# | grupp1 | 1,2 | test1,test2 | bild1,bild2 |
# | grupp2 | 4,5 | test4,test5 | bild4,bild5 |
# | ingen | 3,6,7 | test3,test6,test7 | bild3,bild6,bild7 |
# +--------+-------+-------------------+-------------------+
#
# http://sqlfiddle.com/#!2/4333cc/1
#
Det verkar som om du använder PHP? Jag hade gjort något i den här stilen för att gruppera de senaste 15 bilderna istället:
$mysqli = new \mysqli(/*...*/);
$result = $mysqli->query("SELECT `g`.* FROM `galleri` AS `g` ORDER BY `g`.`id` DESC;");
$grupper = [];
$c = 0;
while(($row = $result->fetch_assoc()) !== null)
{
if($c > 0 && $row["grupp"] !== "ingen" && $row["grupp"] === $grupper[$c - 1][0]["grupp"])
{
$grupper[$c - 1][] = $row;
}
else
{
$grupper[] = [$row];
++$c;
}
}
$result->free();
foreach($grupper as $grupp)
{
echo sprintf(
"Grupp: %s\n",
$grupp[0]["grupp"]
);
foreach($grupp as $bild)
{
echo sprintf(
" Id: %-2d Bild: %s\n",
$bild["id"],
$bild["bild"]
);
}
echo "\n";
}
Resultat:
Grupp: ingen
Id: 7 Bild: bild7
Grupp: ingen
Id: 6 Bild: bild6
Grupp: grupp2
Id: 5 Bild: bild5
Id: 4 Bild: bild4
Grupp: ingen
Id: 3 Bild: bild3
Grupp: grupp1
Id: 2 Bild: bild2
Id: 1 Bild: bild1
Tips: Om du använder [code] istället för [quote] så behåller forumet din formatering.