|
|
|
| есть две таблицы:
posts:
postid int(11)
userid int(11)
time int(10)
touserid char(200)
contain varchar(1000)
|
и listened:
id int(11)
who int(11)
whom int(11)
|
и есть вывод из таблиц:
SELECT posts.* FROM `posts` LEFT JOIN listened ON posts.userid = listened.whom WHERE(`who`='$userid') OR (`userid`='$myid') ORDER BY `postid`
|
всё работает нормально, но если в таблице listened появляется хотя бы 2 записи с `whom`=одинаковому id, то у этого пользователя на главной странице выводятся по две одинаковых своих записи.
пример таблиц в живую:
postid | who | whom
1 | 1 | 2
2 | 2 | 1
|
id | userid | time | touserid | contain
1 | 1 | 1234| 0 | Привет мир
2 | 1 | 1235| 0 | Привет мир 2
|
| |
|
|
|
|
|
|
|
для: flaers
(19.03.2010 в 15:21)
| | есть предложения? | |
|
|
|
|
|
|
|
для: flaers
(19.03.2010 в 15:21)
| | Есть.
1. Объяснить, какие сущности описывают эти таблицы, и что ожидается от запроса.
2. приводить структуру и данные в виде текста дампа. Т.е. из закладки phpMyAdmin "Экспорт" | |
|
|
|
|
|
|
|
для: Trianon
(20.03.2010 в 15:01)
| | 1) таблица `posts` показывает записи пользователей, таблица `listened` показывает кто кого слушает
а в итоге нужно выводить записи тех кого ты слушаешь и свои.
2) экспорт много что выводит, что именно вас там интересует? | |
|
|
|
|
|
|
|
для: flaers
(21.03.2010 в 14:36)
| | >а в итоге нужно выводить записи тех кого ты слушаешь и свои.
Как было сказано в анекдоте про Чапаева и Петьку, "но есть ньюанс".
Это разные вещи. Те, кого ты, и те, кто тебя.
Если это разные вещи, то желание забирать их одним запросом не обусловлено ничем, кроме прихоти.
2) экспорт много что выводит, что именно вас там интересует?
Да пожалуй только то, что Вы рисунками описали в первом посте.
Не больше. Но и не меньше.
Хотя я не сказал бы, что это интересует меня. Это интересует Вас. | |
|
|
|
|
|
|
|
для: Trianon
(21.03.2010 в 17:38)
| | 1) если у вас есть более рациональное решение то пожалуйста предложите. Я думал над тем что в массив скаладывать все нужные id'ы пользователей и выводить затем записи, но не сумел это реализовать. | |
|
|
|
|
|
|
|
для: flaers
(22.03.2010 в 21:13)
| | -- Структура таблицы `listened`
CREATE TABLE `listened` (
`id` int(11) NOT NULL auto_increment,
`who` int(11) NOT NULL default '0',
`whom` int(11) NOT NULL default '0',
`date` char(20) NOT NULL default '',
`time` int(10) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=7 ;
|
-- Дамп данных таблицы `listened`
INSERT INTO `listened` (`id`, `who`, `whom`, `date`, `time`) VALUES
(1, 2, 1, '17.03.2010', 10),
(2, 1, 2, '17.03.2010', 10),
(3, 3, 2, '17.03.2010', 13),
(4, 3, 1, '17.03.2010', 13),
(5, 2, 3, '19.03.2010', 15);
|
| |
|
|
|
|
|
|
|
для: flaers
(22.03.2010 в 21:16)
| | -- Структура таблицы `posts`
CREATE TABLE `posts` (
`postid` int(11) NOT NULL auto_increment,
`userid` int(11) NOT NULL default '0',
`date` char(20) NOT NULL default '',
`time` int(10) NOT NULL default '0',
`touserid` char(200) NOT NULL default '',
`contain` varchar(1000) NOT NULL default '',
PRIMARY KEY (`postid`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=11 ;
|
-- Дамп данных таблицы `posts`
INSERT INTO `posts` (`postid`, `userid`, `date`, `time`, `touserid`, `contain`) VALUES
(1, 1, '17.03.2010', 1268809736, '_', 'Привет!'),
(2, 2, '17.03.2010', 1268809875, '_', 'Привет мир!'),
(3, 3, '17.03.2010', 1268821773, '_', 'Первая запись');
|
| |
|
|
|
|
|
|
|
для: flaers
(22.03.2010 в 21:13)
| | как-то так
SELECT * FROM `posts`
WHERE `userid`=$myid
OR `userid` IN
(SELECT whom FROM listened WHERE `who`=$myid ORDER BY `postid` )AS s
|
| |
|
|
|
|
|
|
|
для: Trianon
(22.03.2010 в 23:11)
| | спасибо сейчас по пробую
единственное хотелось узнать что обозначает "AS s" на конце | |
|
|
|