Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: выборка из двух таблиц
 
 автор: flaers   (19.03.2010 в 15:21)   письмо автору
 
 

есть две таблицы:
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   (20.03.2010 в 14:50)   письмо автору
 
   для: flaers   (19.03.2010 в 15:21)
 

есть предложения?

  Ответить  
 
 автор: Trianon   (20.03.2010 в 15:01)   письмо автору
 
   для: flaers   (19.03.2010 в 15:21)
 

Есть.
1. Объяснить, какие сущности описывают эти таблицы, и что ожидается от запроса.
2. приводить структуру и данные в виде текста дампа. Т.е. из закладки phpMyAdmin "Экспорт"

  Ответить  
 
 автор: flaers   (21.03.2010 в 14:36)   письмо автору
 
   для: Trianon   (20.03.2010 в 15:01)
 

1) таблица `posts` показывает записи пользователей, таблица `listened` показывает кто кого слушает
а в итоге нужно выводить записи тех кого ты слушаешь и свои.
2) экспорт много что выводит, что именно вас там интересует?

  Ответить  
 
 автор: Trianon   (21.03.2010 в 17:38)   письмо автору
 
   для: flaers   (21.03.2010 в 14:36)
 

>а в итоге нужно выводить записи тех кого ты слушаешь и свои.

Как было сказано в анекдоте про Чапаева и Петьку, "но есть ньюанс".
Это разные вещи. Те, кого ты, и те, кто тебя.

Если это разные вещи, то желание забирать их одним запросом не обусловлено ничем, кроме прихоти.

2) экспорт много что выводит, что именно вас там интересует?
Да пожалуй только то, что Вы рисунками описали в первом посте.
Не больше. Но и не меньше.

Хотя я не сказал бы, что это интересует меня. Это интересует Вас.

  Ответить  
 
 автор: flaers   (22.03.2010 в 21:13)   письмо автору
 
   для: Trianon   (21.03.2010 в 17:38)
 

1) если у вас есть более рациональное решение то пожалуйста предложите. Я думал над тем что в массив скаладывать все нужные id'ы пользователей и выводить затем записи, но не сумел это реализовать.

  Ответить  
 
 автор: flaers   (22.03.2010 в 21:16)   письмо автору
 
   для: 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:17)   письмо автору
 
   для: 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, '_', 'Первая запись');

  Ответить  
 
 автор: Trianon   (22.03.2010 в 23:11)   письмо автору
 
   для: 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

  Ответить  
 
 автор: flaers   (23.03.2010 в 18:20)   письмо автору
 
   для: Trianon   (22.03.2010 в 23:11)
 

спасибо сейчас по пробую
единственное хотелось узнать что обозначает "AS s" на конце

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования