Hilfe zu Mysql query gesucht

Einfach genial, Yaslaw! Vielen vielen Dank! Mit deiner Hilfe hab ich die query nun endlich funktionsfähig!

Hab noch ein paar Sachen hinzugefügt (Prüfung ob die Nachricht gelöscht / archiviert wurde) und ein paar Klammern waren zuviel.

Hier das Endergebnis:
Code:
SELECT
	msg.user_2,
	msg.msg_date,
	msg.message,
	msg.status
FROM
	(
		SELECT
			user_1,
			user_2,
			MAX(msg_date) AS max_msg_date
		FROM
			(
				SELECT
					{$uid} AS user_1,
					IF(sender = {$uid}, recipient, sender) AS user_2,
					UNIX_TIMESTAMP(`date`) AS msg_date
				FROM
					user_messages
				WHERE
					IFNULL({$uid} IN (recipient, sender), FALSE)
			) AS dat
		GROUP BY
			user_1,
			user_2
	) AS max_dat
	INNER JOIN  (
			SELECT
				{$uid} AS user_1,
				IF(sender = {$uid}, recipient, sender) AS user_2,
				message,
				UNIX_TIMESTAMP(`date`) AS msg_date,
				status
			FROM
				user_messages
			WHERE
				IFNULL({$uid} IN (recipient, sender), FALSE)
				&& archived != 0
				&& deleted != 0
		) AS msg
		ON msg.user_1 = max_dat.user_1
		AND msg.user_2 = max_dat.user_2
		AND msg.msg_date = max_dat.max_msg_date
ORDER BY
	msg_date DESC

Nochmals ein Riesen großes Danke Yaslaw!

Gruß
Chans
 
Hallo, ich stehe selber vor so einem Problem und bekomme es nicht hin, nun habe ich dieses hier gefunden und wollte es mal testen. Habe mir deine MYSQL abfragen geschnappt und eine Tabelle erstellt :

Code:
CREATE TABLE IF NOT EXISTS `user_messages` (
  `id` int(11) NOT NULL,
  `sender` int(11) NOT NULL,
  `recipient` int(11) NOT NULL,
  `message` text NOT NULL,
  `date` datetime NOT NULL,
  `archived` int(3) NOT NULL,
  `status` int(3) NOT NULL,
  `deleted` int(3) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Daten für Tabelle `user_messages`
--

INSERT INTO `user_messages` (`id`, `sender`, `recipient`, `message`, `date`, `archived`, `status`, `deleted`) VALUES
(1, 4, 3, 'test1', '2012-10-18 00:00:00', 0, 0, 0),
(2, 4, 3, 'test2', '2012-10-18 01:01:01', 0, 0, 0),
(3, 5, 3, 'test11', '2012-10-18 02:02:02', 0, 0, 0),
(4, 5, 3, 'test22', '2012-10-18 03:03:03', 0, 0, 0);

Leider Zeigt er mir , das er keine Einträge gefunden hat an. Var_dump zeigt auch null. Ansonsten keine Fehlermeldungen.

Sieht jemand evtl. den Fehler?

Freundliche Grüße

Basti

@edit:

hier die abfragen
PHP:
$uid='3';                      
    $pm_read = $db->query("SELECT
    msg.user_2,
    msg.msg_date,
    msg.message,
    msg.status
FROM
    (
        SELECT
            user_1,
            user_2,
            MAX(msg_date) AS max_msg_date
        FROM
            (
                SELECT
                    {$uid} AS user_1,
                    IF(sender = {$uid}, recipient, sender) AS user_2,
                    UNIX_TIMESTAMP(`date`) AS msg_date
                FROM
                    user_messages
                WHERE
                    IFNULL({$uid} IN (recipient, sender), FALSE)
            ) AS dat
        GROUP BY
            user_1,
            user_2
    ) AS max_dat
    INNER JOIN  (
            SELECT
                {$uid} AS user_1,
                IF(sender = {$uid}, recipient, sender) AS user_2,
                message,
                UNIX_TIMESTAMP(`date`) AS msg_date,
                status
            FROM
                user_messages
            WHERE
                IFNULL({$uid} IN (recipient, sender), FALSE)
                && archived != 0
                && deleted != 0
        ) AS msg
        ON msg.user_1 = max_dat.user_1
        AND msg.user_2 = max_dat.user_2
        AND msg.msg_date = max_dat.max_msg_date
ORDER BY
    msg_date DESC",'assoc');

  var_dump($pm_read);
 
Im zweiten Teil hast du:
SQL:
            WHERE
                IFNULL({$uid} IN (recipient, sender), FALSE)
                && archived != 0
                && deleted != 0
Deine Testdaten haben aber in diesen Feldern überall 0 drin. Ergo werden sie nicht selektiert
 
Zuletzt bearbeitet von einem Moderator:
Zurück