Hallo Forum!
Folgendes Query liefert mir genau das gewünschte Resultat:
SELECT CONCAT( SUBSTRING( message, 1, 20 ) , "..." ) AS head, messages.`read` , messages.msgid, messages.`from` , messages.sentdate, user.name, user.gender, (
YEAR( CURDATE( ) ) - YEAR( user.age )
) - ( RIGHT( CURDATE( ) , 5 ) < RIGHT( user.age, 5 ) ) AS ageinyears, namelist.newname, block.id AS bid
FROM messages
LEFT JOIN user ON messages.`from` = user.id
LEFT JOIN namelist ON user.id = namelist.`rename`
LEFT JOIN block ON block.block != user.id AND block.id = '{USER_ID}'
WHERE messages.`to` = '{USER_ID}'
AND messages.rdelete = '0'
AND messages.sentdate + INTERVAL 20
DAY > NOW( )
ORDER BY messages.sentdate DESC
LIMIT 0 , 10
schränke ich hier jedoch nun mit GROUP BY messages.msgid die Ergebnismenge ein, werden im Feld "head" also dem substring mit den angehängten "..." nur noch soviele Zeichen angezeigt wie in den "" des CONCAT angegeben werden. Ganz gleich welche.
Selbiges passiert wenn ich der WHERE Klausel ein nötiges block.block IS NOT NULL hinzufüge.
Lasse ich das CONCAT aus dem ersten Feld einfach weg, liefert SUBSTR ein leeres Resultat.
Leider kann ich grade nicht nachvollziehen warum das passiert - und leider bin ich auch nicht grade ein Freak in SQL.
Grundsätzlich habe ich eine Tabelle "block" in der 2 user id's eingetragen sind nach dem Schema, wer blockiert wen. Nun möchte ich eine Liste von Nachrichten ausgeben, die NICHT die von denen auf der block-Liste enthalten.
die tabelle rename verhält sich ähnlich - hier sind alternative Benutzernamen abgelegt, die nur auf den jeweiligen USER {USER_ID} zutreffen.
hat irgendwer dieses nun verstanden? :) Und kann man es lösen?