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

Форум MySQL

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

 

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

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

тема: DISTINCT при LOIN не работает?
 
 автор: tAleks   (31.10.2011 в 17:53)   письмо автору
 
 

Делаю такой запрос:

$sql_groups = "
            SELECT
                DISTINCT(articles_groups.id_group),
                articles.id_article,
                articles_groups.name
            FROM articles_groups
                LEFT JOIN articles USING(id_group)
            WHERE articles_groups.showhide = '1'
                AND articles_groups.type = '$type'
                AND articles.id_article IS NOT NULL
            ORDER BY articles_groups.pos";


Че-то он не работает. В смысле извелкает все, а не только с уникальным articles_groups.id_group.

Так и должно быть?

Можно ли как нибудь извелечь записи с уникальным articles_groups.id_group но без конструкции GROUP BY?

  Ответить  
 
 автор: Valick   (31.10.2011 в 19:43)   письмо автору
 
   для: tAleks   (31.10.2011 в 17:53)
 

Можно ли как нибудь извелечь записи с уникальным articles_groups.id_group но без конструкции GROUP BY?
вы бы приоткрыли завесу тайны по каким таким причинам вас не устраивает GROUP BY

  Ответить  
 
 автор: tAleks   (01.11.2011 в 12:45)   письмо автору
 
   для: Valick   (31.10.2011 в 19:43)
 

Ну, вроде как GROUP BY вне агрегатного запроса не очень хорошо.

  Ответить  
 
 автор: cheops   (01.11.2011 в 13:01)   письмо автору
 
   для: tAleks   (01.11.2011 в 12:45)
 

У вас фактически и есть агрегатный запрос.

  Ответить  
 
 автор: tAleks   (01.11.2011 в 13:08)   письмо автору
 
   для: cheops   (01.11.2011 в 13:01)
 

Агрегатная функция-то не используется.

В данном случае, без агрегатной функции, при группировке, одной записи в левой таблице соответствуют несколько записей в правой. Т.е. каую из этих правых записей мскул должен выбрать, при группировке? Меня вот это смущает. Поэтому и спрашиваю, как нибудь без GROUP BY можно выбрать записи из результирующей таблице с уникальными значениями столбца id_group?

Если бы объединнения небыло - тогда DISTINCT, а с объединением он не работает.

  Ответить  
 
 автор: cheops   (01.11.2011 в 13:11)   письмо автору
 
   для: tAleks   (01.11.2011 в 13:08)
 

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

  Ответить  
 
 автор: tAleks   (01.11.2011 в 13:14)   письмо автору
 
   для: cheops   (01.11.2011 в 13:11)
 

Более хитрый, это означает наиболее тяжелый и ресурсозатратный для мускула?
Или более хитрый, в плане что он хитрый, но при этом выполняется более быстро, и с наименьшими ресурсозатратами?

  Ответить  
 
 автор: cheops   (01.11.2011 в 13:17)   письмо автору
 
   для: tAleks   (01.11.2011 в 13:14)
 

Это зависит от данных и индексации, как правило, да запрос будет более ресурсоемким, так как вместо первой попавшейся строки из готовой таблицы будет предварительно формироваться вспомогательная таблица (которая будем затем подвергаться объединению). Если размеры таблиц не велики, такая таблица вполне сможет уместиться в буфере, расположенном в оперативной памяти, в противном случае, она отправится на жесткий диск.

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

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