Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как избавиться от дублирования записей

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Telnet
Отправлено: 28 Ноября, 2014 - 22:02:40
Post Id


Частый гость


Покинул форум
Сообщений всего: 223
Дата рег-ции: Май 2011  


Помог: 1 раз(а)




Всем привет
Есть такие вот 2 таблички
1 users_message
http://firepic[dot]org/?v=6[dot]2014-11-[dot][dot][dot]jqfwbeml9nb7[dot]jpg
2 users_casting
http://firepic[dot]org/?v=6[dot]2014-11-[dot][dot][dot]arb03obpsmny[dot]jpg

Я пытаюсь получить все записи из таблицы users_casting для конкретного пользователя +поле state из users_message это типо прочел этот пользователь это сообщение или нет, пытался по разному и через left join
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT casting.*,message.state FROM `unw9o_users_casting` AS casting LEFT JOIN `unw9o_users_message` AS message ON (message.casting_id = casting.id) WHERE casting.date > NOW() AND `casting`.`id` IN (SELECT casting_id FROM `unw9o_users_message` WHERE `user_id` =65)
  3.  

и просто через запрос к нескольким таблицам

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT DISTINCT casting.*,message.state FROM `unw9o_users_casting` AS casting,`unw9o_users_message` AS message
  2.  WHERE casting.date > NOW() AND `casting`.`id` IN (SELECT casting_id FROM `unw9o_users_message` WHERE `user_id` =65) AND (message.casting_id = casting.id)



Результат всегда один и тоже
http://firepic[dot]org/?v=6[dot]2014-11-[dot][dot][dot]it0yqsc49z0u[dot]jpg
т.е он не совсем верный откуда то берется первая запись где state 0 и casting_id = 8 дублируется
Прошу помочь мне с этим разобраться.
 
 Top
Viper
Отправлено: 28 Ноября, 2014 - 22:14:46
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




(Отредактировано автором: 28 Ноября, 2014 - 22:15:27)



-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Telnet
Отправлено: 28 Ноября, 2014 - 22:27:17
Post Id


Частый гость


Покинул форум
Сообщений всего: 223
Дата рег-ции: Май 2011  


Помог: 1 раз(а)




Такой запрос вернул тоже самое что и раньше
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT DISTINCT casting.*,message.state FROM `unw9o_users_casting` AS casting,`unw9o_users_message` AS message
  2.  WHERE casting.date > NOW() AND `casting`.`id` IN (SELECT casting_id FROM `unw9o_users_message` WHERE `user_id` =65) AND (message.casting_id = casting.id)
  3.  GROUP BY `message`.`id`


а такой пишет ошибка #1052 - Column 'id' in IN/ALL/ANY subquery is ambiguous
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT  DISTINCT casting.* ,message.state,`message`.`id`
  2. FROM  `unw9o_users_casting`  AS casting
  3. LEFT JOIN `unw9o_users_message`  AS  message ON (message.casting_id = casting.id)
  4. WHERE  `id`
  5. IN (
  6. SELECT m.casting_id
  7. FROM  `unw9o_users_message` AS m
  8. WHERE  `user_id` =65
  9. )
  10. GROUP BY `message`.`id`
 
 Top
biperch
Отправлено: 28 Ноября, 2014 - 22:35:46
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 588
Дата рег-ции: Окт. 2009  
Откуда: Днепропетровск


Помог: 8 раз(а)




убери distinct

а в group by укажи поле по которому ты хочешь исключить повторения
 
 Top
Telnet
Отправлено: 28 Ноября, 2014 - 22:57:13
Post Id


Частый гость


Покинул форум
Сообщений всего: 223
Дата рег-ции: Май 2011  


Помог: 1 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT casting . * , message.state
  3. FROM  `unw9o_users_casting` AS casting
  4. LEFT JOIN  `unw9o_users_message` AS message ON ( message.casting_id = casting.id )
  5. WHERE casting.date > NOW( )
  6. AND  `casting`.`id`
  7. IN (
  8.  
  9. SELECT casting_id
  10. FROM  `unw9o_users_message`
  11. WHERE  `user_id` =65
  12. )
  13. GROUP BY  `casting`.`id`
  14.  

вернул
http://firepic[dot]org/?v=2[dot]2014-11-[dot][dot][dot]ndy6leaiphdt[dot]jpg
что есть не верно ведь у `casting`.`id` 8 в таблице users_message
http://firepic[dot]org/?v=6[dot]2014-11-[dot][dot][dot]jqfwbeml9nb7[dot]jpg
1 state
а он мне 0 показывает
(Добавление)
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT casting . *
  3. FROM  `unw9o_users_casting` AS casting
  4. WHERE casting.date > NOW( )
  5. AND  `id`
  6. IN (
  7.  
  8. SELECT casting_id
  9. FROM  `unw9o_users_message`
  10. WHERE  `user_id` =65
  11. )
  12.  

Вот такой запрос возвращает все верно но он без поля state а хотелось бы все таки все сделать в 1 запросе
(Добавление)
Все уже сделал через циклический перебор резудьтатов первой выборки и добавления свойства state
Выглядет это все примерно так
PHP:
скопировать код в буфер обмена
  1.  
  2.          if($items){
  3.             $db = $this->getDbo();
  4.             foreach ($items as $key => $item) {
  5.                 $sql = "SELECT `state` FROM `#__users_message` WHERE `user_id`=".JFactory::getUser()->id .' AND casting_id = '.$item->id;
  6.                 $db->setQuery($sql);
  7.                 $item->state = $db->loadResult();
  8.             }
  9.         }
  10.  

но все таки интересно почему же мои первый запросы не принесли желаемого результат

(Отредактировано автором: 28 Ноября, 2014 - 22:59:12)

 
 Top
biperch
Отправлено: 28 Ноября, 2014 - 23:31:29
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 588
Дата рег-ции: Окт. 2009  
Откуда: Днепропетровск


Помог: 8 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT c.*,m.state FROM `unw9o_users_casting` AS c
  3. INNER JOIN `unw9o_users_message` AS m ON m.casting_id = c.id AND m.user_id=c.created_by
  4. WHERE
  5. c.date > NOW() AND
  6. c.created_by = 65
  7.  


если я правильно понял что ты хочешь
с условием что created_by это тоже user_id

и не знаю допустимо ли для Вас что casting_id у вас имеет повторяющиеся значения например тот же 8 два раза
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB