Nu wil ik uit beide tabellen een aantal kolommen opvragen op basis van labels.capcode, waarbij alarmeringen.id correleert met labels.messageid. Ik wil dan alle entries uit labels hebben die dezelfde messageid hebben als de opgegeven capcode, plus wat zaken uit alarmeringen. Ik heb dit in elkaar gezet, maar deze is erg traag en soms krijg ik helemaal geen resultaten (terwijl die er wel zouden moeten zijn) :
SELECT a.id, a.datetime, a.type, a.message, l.incident, l.capcode, l.label
FROM labels as l, alarmeringen as a
WHERE l.messageid = a.id AND l.messageid IN (SELECT messageid FROM labels WHERE capcode = $capcode)
ORDER BY l.id DESC
LIMIT 100
Misschien kan iemand mij wat verder op weg helpen? :)
Waarom heb je die subquery? Die is zinloos omdat je de tabel labels toch al gebruikt.
Probeer eens iets als volgt:
SELECT a.id, a.datetime, a.type, a.message, l.incident, l.capcode, l.label
FROM labels as l
JOIN alarmeringen as a ON l.messageid = a.id
WHERE l.capcode = '$capcode'
ORDER BY l.id DESC
LIMIT 100
Je zou er ook goed aan doen om op iets anders te sorteren dat een id, maar dat terzijde.
Vergeet ook $capcode niet te escapen.
Waarom heb je die subquery? Die is zinloos omdat je de tabel labels toch al gebruikt.
Probeer eens iets als volgt:
SELECT a.id, a.datetime, a.type, a.message, l.incident, l.capcode, l.label
FROM labels as l
JOIN alarmeringen as a ON l.messageid = a.id
WHERE l.capcode = '$capcode'
ORDER BY l.id DESC
LIMIT 100
Je zou er ook goed aan doen om op iets anders te sorteren dat een id, maar dat terzijde.
Vergeet ook $capcode niet te escapen.
Geprobeerd, maar dit geeft niet het gewenste resultaat :
Waar je een groene "GROUP-1" ziet staan daar zouden meerdere regels onder elkaar moeten verschijnen (de "labels"). Hij pakt dus wel de 'capcode', dus het begin is er. Maar niet de andere entries die bij deze groep horen (lees: zelfde messageid)
Klopt je structuur dan wel? Want je label heeft een capcode, daar filter je op. Hoort de capcode dan niet bij de alarmering?
Nouja, misschien was mijn oorspronkelijke query niet helemaal netjes, maar die gaf wel het gewenste resultaat, zij het dat het soms erg lang duurde of helemaal niet werkte (erg onbetrouwbaar dus). De site draait verder probleemloos en de structuur is (mijns inziens) op orde, maar ik heb het niet zelf geschreven, slechts overgenomen enige tijd terug. Wellicht zijn alle queries niet helemaal standaard, geen idee. Ik merk wel dat alles vrij snel gaat, alleen wat ik nu zelf probeer gaat de mist in. Dus ik ga er vanuit dat ik nu zelf de fout in ga en dat de rest redelijk goed gaat. Navigeer eens op de site (knoppen onderin). Je zult wellicht niet weten wat je qua output moet verwachten, maar het gaat in elk geval redelijk vlot. Dan zie je in elk geval hoe de groepen eruit zouden moeten zien. Elke groep heeft een eigen id/messageid en volgens mij zit dat wel snor. Ik ging wat Googelen en kwam toen uit op die subqueries, vandaar mijn vage coding :)
en een tabel die de meldingen en de labels aan elkaar koppelt.
Want kennelijk sla je nu voor elke melding een compleet label op. Stel het label is "voorbeeld" en je wilt dat aanpassen naar "Voorbeeld", dan moet je nu dus alle entry's af?
SELECT a.id, a.datetime, a.type, a.message, l2.incident, l2.capcode, l2.label
FROM labels as l1
JOIN alarmeringen as a ON l1.messageid = a.id
JOIN labels as l2 ON l2.messageid = a.id
WHERE l1.capcode = '$capcode'
ORDER BY l1.id DESC
LIMIT 100
SELECT a.id, a.datetime, a.`type`, a.incident, l.label, l.capcode
FROM alarmeringen a
JOIN labels_alarmeringen la ON la.alarmering_id = a.id
JOIN labels l on l.id = la.label_id
GROUP BY a.id, a.datetime, a.`type`, a.incident, l.label, l.capcode
HAVING SUM(l.capcode = '$capcode') > 0