Hallo

Wie kan me op weg helpen met het volgende.
In een sql tabel staat:

velden:
id,username, timestamp, color
1, user2, 12:00, blauw;
2, user1, 12:01, groen;
3, user2, 12:05, purper;
4, user1, 12:11, wit;

wat is de meest efficiëntste manier om een lijst te 'echo-en' met éérst alle waarden van user1 en daarna alle van user 2
dus groeperen en dan 1 voor 1 tonen
De grove manier is om 2 maal achter elkaar een query te doen,
dus in het geval alle records om van elke user te vinden
$query = mysql_query ('SELECT *
FROM table
WHERE user = "User1"
ORDER BY id DESC
');

while ($row = mysql_fetch_assoc($query))
{
echo $row['User1'].$row['timestamp'].$row['color'];
}

hoe kan dat met 1 query?


2e vraag: wat is de handigste manier om van beide users het laatste toegevoegde record te krijgen
dus in het geval alle records om van elke user te vinden, 2 maal een query
$query = mysql_query ('SELECT *
FROM table
WHERE user = "User1"
ORDER BY id DESC
LIMIT 1
');

while ($row = mysql_fetch_assoc($query))
{
echo $row['User1'].$row['timestamp'].$row['color'];
}

maar wat is de meest elegantste, in 1 query?

dank jullie
m
Het hangt er een beetje vanaf welke informatie je precies wilt.

Wil je zowel een lijst van alle entries van alle users en tevens (apart uitgelicht) de meeste recente tijd / kleur van een user

of

Wil je uitsluitend de laatste tijd / kleur per user?

Als je "alles" wilt is het wellicht makkelijker om alles eerst in een array-structuur te kieperen en in te delen op user id. Zo'n "datastructuur" is waarschijnlijk ook overzichtelijker dan dat je alles on-the-fly probeert te bepalen binnen een while-loop waarin je je resultaten ophaalt. Voorbeeld: je hebt je resultaten in het array $userData geladen met de volgende structuur:

<?php
$userData = array(
    1 => array(
        'entries' => array(
            array('time' => '...', 'color' => 'red'),
            array('time' => '...', 'color' => 'green'),
            array('time' => '...', 'color' => 'blue'),
            // etc.
        ),
    ),
    2 => array(
        // etc.
    ),
);

// first user
$user = $userData[1];
$lastEntryIndex = count($user['entries']) - 1; // mss ook even controleren of er uberhaupt entries zijn...

// color of last entry
echo $user['entries'][$lastEntryIndex]['color'];
?>



Je aanpak zal voor een groot deel bepaald worden door wat je probeert te bereiken.

Reageren