mysql для Андрей Косинцев,

Владмир Габдуллин
Так и не реализовал сам.. Делаю систему оповещений, то есть, если статью пользователя кто-то лайкнул или запомнил(добавил в избранное), сообщаем пользователю об этом на странице оповещений, как на многих ресурсах.
Пользователь открывает страницу, где идет вывод выборки из БД, из нескольких таблиц: пользователь, публикации, лайки и запомнить: 

CREATE TABLE IF NOT EXISTS `users` (
  `id_user` int UNSIGNED NOT NULL AUTO_INCREMENT,
`us_first_name` varchar(35) DEFAULT NULL,
`us_last_name` varchar(35) DEFAULT NULL,
`shop_or_not` tinyint DEFAULT NULL,
`us_seller_title` varchar(100) DEFAULT NULL,
`us_activity` varchar(500) DEFAULT NULL,
`us_nikname` varchar(35) DEFAULT NULL,
`us_ava_path` varchar(100) DEFAULT 'media/images/ava_default/x.png',
`us_country` varchar(52) NOT NULL,
`us_city` varchar(35) NOT NULL,
`sex` varchar(8) DEFAULT NULL,
`date_of_reg` varchar(20) NOT NULL,
`us_email` varchar(255) NOT NULL COLLATE utf8_bin,
  `password` varchar(52) NOT NULL COLLATE utf8_bin,
  `id_role` tinyint(5) DEFAULT 1,
  `name` varchar(256) DEFAULT 'simple_user',
`activate_key` varchar(35) NOT NULL,
`is_activ` tinyint NOT NULL DEFAULT 0,
INDEX ixMail_pass (us_email, password),
INDEX ixUs_first_name (us_first_name),
INDEX ixUs_last_name (us_last_name),
INDEX ixUs_seller_title (us_seller_title),
INDEX ixUs_activity (us_activity),
INDEX ixUs_country (us_country),
INDEX ixUs_city (us_city),
  PRIMARY KEY (`id_user`),
  UNIQUE KEY `us_email` (`us_email`)
)COLLATE utf8_general_ci;
 -- статьи
CREATE TABLE IF NOT EXISTS `deals`(
`id_deal` int UNSIGNED NOT NULL AUTO_INCREMENT,
`id_user` int UNSIGNED NOT NULL,
`title` varchar(150) DEFAULT '',
`proviso` varchar(500) DEFAULT '',
`description` MEDIUMTEXT NOT NULL,
`date_of_puble` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id_deal`),
INDEX ixTitle (title)
)COLLATE utf8_general_ci;
-- таблица лайканья статей 
CREATE TABLE IF NOT EXISTS `like_deal`(
`id_like` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`id_user` int UNSIGNED NOT NULL,
`id_deal` int UNSIGNED NOT NULL,
`readORnot` tinyint NOT NULL DEFAULT 0,
`date_like` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id_like`),
UNIQUE KEY user_deal(`id_user`, `id_deal`),
FOREIGN KEY (id_deal) REFERENCES deals (id_deal)
ON DELETE CASCADE
);
-- таблица добавления статей в избранное 
CREATE TABLE IF NOT EXISTS `remember_deal`(
`id_remember` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`id_user` int UNSIGNED NOT NULL,
`id_deal` int UNSIGNED NOT NULL,
`readORnot` tinyint NOT NULL DEFAULT 0,
`date_remember` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id_remember`),
UNIQUE KEY user_deal(`id_user`, `id_deal`),
FOREIGN KEY (id_deal) REFERENCES deals (id_deal)
ON DELETE CASCADE
);
Задача: сделать запрос, который будет выводить лайки и запоминание статей(добавление в избранное), посредством объединение нескольких таблиц(в перспективе еще и статьи других разделов сайта) и выводить необходимое, сортируя все по дате. То есть, кто, когда и что лайкнул или запомнил.
Важно: если у текущей статьи есть только добавка в избранное, то выборка из таблицы лайков ничего не возвращает(логично). 
В последнем варианте запроса все данные из таблицы добавки в избранное(запаминаний(remember_deal)), почему то записываются в результат, как буто если бы я делал вывод из таблицы лайков(like_deal). ТО есть таблица лайков(like_deal) пуста, а в таблице запаминаний(remember_deal) одна запись и результат выборки из remember_deal записывается в поля like_deal и вот что возвращает, хотя ["id_like"] не существует:
array(1) {
  [0]=>
  array(10) {
    ["id_user"]=>
    string(1) "2"
    ["us_first_name"]=>
    string(9) "not_value"
    ["us_last_name"]=>
    string(9) "not_value"
    ["us_seller_title"]=>
    string(26) "The Coca Colla Corporation"
    ["us_ava_path"]=>
    string(26) "media/images/ava/2/ava.jpg"
    ["id_like"]=>
    string(1) "1"
    ["id_deal"]=>
    string(2) "60"
    ["readORnot"]=>
    string(1) "0"
    ["date_like"]=>
    string(19) "2015-05-05 00:19:26"
    ["title"]=>
    string(117) "Националист Константинов амнистирован и освобожден в зале суда"
  }
}
Важно: Каждый результат должен быть отдельным массивом, даже если у одной и той же статьи, есть и лайки и добавили в избр.
Последний вариант запроса:
$res = $this->db->Select("SELECT u.id_user, u.us_first_name, u.us_last_name, u.us_seller_title, u.us_ava_path, l_d.id_like, l_d.id_deal, l_d.readORnot, l_d.date_like, d.id_deal, d.title
FROM like_deal AS l_d
LEFT JOIN users AS u using(id_user)
LEFT JOIN deals AS d using(id_deal)
WHERE d.id_user = '$id_user' AND l_d.id_user != '$id_user'
UNION 
SELECT us.id_user, us.us_first_name, us.us_last_name, us.us_seller_title, us.us_ava_path, r_d.id_remember, r_d.id_deal, r_d.readORnot, r_d.date_remember, d.id_deal, d.title
FROM remember_deal AS r_d
LEFT JOIN users AS us ON r_d.id_user=us.id_user
LEFT JOIN deals AS d ON d.id_deal=r_d.id_deal
WHERE d.id_user = '$id_user' AND r_d.id_user != '$id_user'
ORDER BY 9 DESC");
0 чел.