Samenvoegen van rijen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Niek van Oost

Niek van Oost

21/10/2013 10:46:57
Quote Anchor link
Dag allemaal,
Ik heb deze database:

ID (Int)
Timestamp (Timestamp)
Melding (Text)
Capcode (Int)
Label (Varchar)

Daarin staan meldingen van hulpdiensten. Alles werkt prima. Nu wil ik die meldingen netjes gaan weergeven met php uit de database. Ook dat gaat prima. Nu wil ik alleen de 'dubbele meldingen' samenvoegen. Er zijn namelijk meldingen die bijna hetzelfde zijn in de database, behalve 2 waardes: capcode en label. Is het mogelijk om die samengevoegd te tonen? Ik kwam een soortgelijk topic uit 2010 tegen in het forum maar daar werd geen oplossing gegeven dus vandaar een nieuw topic.

Voorbeeld:
PRIO 1 6198 6230 6171 STRAATNAAM PLAATSNAAM Letsel (Beknelling: ) (INC: 04)
123456 - Capcode label - melding label
PRIO 1 6198 6230 6171 STRAATNAAM PLAATSNAAM Letsel (Beknelling: ) (INC: 04)
654321 - Capcode label - melding label

Die wil ik gaan tonen als:
PRIO 1 6198 6230 6171 STRAATNAAM PLAATSNAAM Letsel (Beknelling: ) (INC: 04)
123456 - Capcode label - melding label
654321 - Capcode label - melding label

De capcode labels worden dmv een join uit een andere tabel opgehaald.

$sql = mysql_query("SELECT * FROM alarmeringen LEFT JOIN capcode on alarmeringen.capcode = capcode.cap_capcode ORDER BY id DESC LIMIT 0, 50") or die (mysql_error());

Ben al bezig geweest met GROUP BY melding maar toen werden de meldingen alles behalve bij elkaar getoond.
Wie kan mij helpen?
Alvast bedankt!
Gewijzigd op 21/10/2013 10:49:39 door Niek van Oost
 
PHP hulp

PHP hulp

17/11/2024 09:26:02
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

21/10/2013 14:26:13
Quote Anchor link
SELECT * is in het algemeen al niet al maar in combinatie met (LEFT) JOIN en GROUP BY helemaal een zeer slechte gewoonte.
Kolommen die in de select staan en niet in aggegrate functie moeten nl. in de group by benoemd worden.
Daarnaast moet je dus minimaal 1 aggegrate functie in je query hebben, meestal in de select, maar mag eventueel ook in de having clause (of beide).
Je krijgt dan zoiets:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
SELECT
    a.melding,
    MAX(a.timestamp) timestamp,
    GROUP_CONCAT(CONCAT_WS(' - ', a.capcode, c.label, a.label) SEPARATOR '|') combi
FROM
    alarmeringen a
JOIN
    capcodes c
    ON a.capcode = c.cap_capcode
GROUP BY melding
ORDER BY timestamp DESC

Dit is geen mooie query, en eigenlijk kan je dit gewoon beter in php oplossen.
 
Niek van Oost

Niek van Oost

21/10/2013 14:57:16
Quote Anchor link
Afhandelen via PHP mag ook, maar ik heb geen idee ik welke richting ik daarvoor moet kijken.. Resultaten worden nu melding voor melding in een <tr> getoond.
Gewijzigd op 21/10/2013 15:03:14 door Niek van Oost
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

21/10/2013 15:30:12
Quote Anchor link
Heel even in het kort:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$pointer
= ''; //$pointer == ''
$end = '';
while ($item = $result->fetch_assoc()) {
    if ($item['melding'] != $pointer) {
        // nieuwe groep, dus
        //beeindig vorige

        echo $end;
        $end = '</div>';
        //begin nieuwe
        $pointer = $item['melding'];
        echo '<div class="melding_groep"><div class="melding_tekst">',
        $pointer = $item['melding'], '</div>';
    }

    // en dan hier de dingen voor de capcodes etc.
}
?>

Let wel op dat als je in twee verschillende tabellen kolommen met dezelfde naam hebt maar met verschillende waardes, je één van de twee een alias moet geven, anders krijg je er maar één in de assoc. array
Gewijzigd op 21/10/2013 18:23:22 door Ger van Steenderen
 
Niek van Oost

Niek van Oost

21/10/2013 16:23:58
Quote Anchor link
Thanks! Dat werkt! Super!
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

21/10/2013 18:24:41
Quote Anchor link
Wat is php toch lief, stond toch wel een aardig foutje in mijn eerste code (ik kan zelf ook maar beter bij Walt Disney gaan solliciteren).
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.