Archief - Vraagje SQL statement

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

GMotha

Legacy Member
Ik ben voor mezelf aan een projectje begonnen. Het zou in feite een web-applicatie zijn waar men afbeeldingen kan toevoegen aan albums en er massa's informatie kan hangen.

Voor een overzichtscherm wou ik per album de basisgegevens en een willekeurige afbeelding uit dat album weergeven. Geen idee hoe ik dat in één statement plaats.

Code:
SELECT a.Title, a.Description, a.Location, a.DateStart, a.DateEnd, b.Image FROM tCAT a, tPIC b WHERE b.Category = a.Id AND b.Image IS NOT NULL
Zo toont deze dus alle albums (categoriën) en alle foto's daarvan. Dus een record per foto.
Ik zou deze willen omvormen naar één enkele string die per album slechts één willekeurige foto toont (als voorbeeld).

Iemand een idee hoe ik dit oplos?
Ik zou aan de tCAT tabel een veld kunnen toevoegen die reeds een thumb weergeeft, maar dat zou geen random zijn.

Cycloon

Legacy Member
Zeg mss eerst ff welke database je gebruikt? Bij een MYSQL database is het praktisch onmogelijk om dit te bereiken.

th43ns

Legacy Member
GMotha zei:
Ik ben voor mezelf aan een projectje begonnen. Het zou in feite een web-applicatie zijn waar men afbeeldingen kan toevoegen aan albums en er massa's informatie kan hangen.

Voor een overzichtscherm wou ik per album de basisgegevens en een willekeurige afbeelding uit dat album weergeven. Geen idee hoe ik dat in één statement plaats.

Code:
SELECT a.Title, a.Description, a.Location, a.DateStart, a.DateEnd, b.Image FROM tCAT a, tPIC b WHERE b.Category = a.Id AND b.Image IS NOT NULL
Zo toont deze dus alle albums (categoriën) en alle foto's daarvan. Dus een record per foto.
Ik zou deze willen omvormen naar één enkele string die per album slechts één willekeurige foto toont (als voorbeeld).

Iemand een idee hoe ik dit oplos?
Ik zou aan de tCAT tabel een veld kunnen toevoegen die reeds een thumb weergeeft, maar dat zou geen random zijn.
Afhankelijk van de db hang je er iets anders in maar dit is voor sql server:

SELECT a.Title, a.Description, a.Location, a.DateStart, a.DateEnd, b.Image FROM tCAT a, tPIC b
WHERE a.id = (SELECT TOP 1 category FROM tPIC ORDER BY NEWID())
AND b.Image IS NOT NULL


Andere random selects vindt ge hier: SQL to Select a random row from a database table

Cycloon

Legacy Member
Ah, ik zocht het veel te ver, blijkbaar is het redelijk easy in mysql :p

GMotha

Legacy Member
thaens zei:
Afhankelijk van de db hang je er iets anders in maar dit is voor sql server:

SELECT a.Title, a.Description, a.Location, a.DateStart, a.DateEnd, b.Image FROM tCAT a, tPIC b
WHERE a.id = (SELECT TOP 1 category FROM tPIC ORDER BY NEWID())
AND b.Image IS NOT NULL
Deze zou slechts 1 record opleveren, het is de bedoeling dat elke record uit tCAT weergegeven wordt. Maar met slechts 1 willekeurige image uit tPIC (elke record in tCAT is gelinked aan meerdere pics) per record.

Toch al bedankt voor de hulp zover.

apa

Legacy Member
Ik ga ervan uit dat Image (in jouw geval) een varchar is en geen Binary ofzo:
Code:
SELECT
  Title = tCAT.Title,
  Description = tCAT.Description,
  Location = tCAT.Location,
  DateStart = tCAT.DateStart,
  DateEnd = tCAT.DateEnd,
  Image = SUBSTR(MIN(RIGHT('0000' + CONVERT(varchar(04), 1000 * RAND())) + tPIC.Image), 5)
FROM tCAT
  INNER JOIN tPIC ON tPIC.Category = tCAT.id
WHERE tPIC.Image IS NOT NULL
GROUP BY
  tCAT.Title,
  tCAT.Description,
  tCAT.Location,
  tCAT.DateStart,
  tCAT.DateEnd

Dat lijkt een ietwat vreemde syntax, maar ik merk dat dit soort queries vaak performanter is dan veel van de alternatieven; zeker in vergelijking met sub-queries.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan