Views без дублей

Аватар пользователя kurl kurl 9 ноября 2017 в 22:01

Коллеги, подскажите, пожалуйста, как убрать "дубли" из views?
У меня есть набор однотипных нод с разным содержанием. Заголовки (поле ноды) могут совпадать (это и есть "дубли"), значения других полей - могут различаться. Мне нужно получить во views выборку (список: заголовок и ещё несколько полей каждой ноды), не содержащую повторяющиеся заголовки.
Т.е., если есть 2 ноды с одинаковым заголовком, то в выборку должна попасть одна - любая (вторая, тетья и тд ноды в выборку не попадают).

0 Thanks

Комментарии

Аватар пользователя mbaev mbaev 10 ноября 2017 в 11:30

Перечитай вопрос.

Мне нужно получить во views выборку (...), НЕ содержащую повторяющиеся заголовки.

Аватар пользователя ХулиGUN ХулиGUN 10 ноября 2017 в 12:04

@mbaev

SELECT title, col_name FROM my_table GROUP_BY title;

С помощью ORDER BY решаем из какой записи будет выведен col_name

Что я упускаю?

Аватар пользователя multpix multpix 10 ноября 2017 в 12:45

просто прочти вопрос!
прочти еще раз))))

задайся встречным вопросом - почему не unique...

Аватар пользователя ХулиGUN ХулиGUN 10 ноября 2017 в 12:50
multpix wrote:

просто прочти вопрос!

прочти еще раз))))

kurl wrote:

У меня есть набор однотипных нод с разным содержанием

kurl wrote:

Заголовки (поле ноды) могут совпадать (это и есть "дубли")

kurl wrote:

ыборку (список: заголовок и ещё несколько полей каждой ноды), не содержащую повторяющиеся заголовки.

kurl wrote:

если есть 2 ноды с одинаковым заголовком, то в выборку должна попасть одна - любая (вторая, тетья и тд ноды в выборку не попадают).

И что я упускаю?

Аватар пользователя gun_dose gun_dose 10 ноября 2017 в 23:11

С чего бы это они правильные? Distinct даёт уникальность только по ключевым столбцам, коим тайтл не является. А вот ответ dgastudio больше всех претендует на истину.

Аватар пользователя mbaev mbaev 11 ноября 2017 в 10:29

Не distinct, а GROUP BY. Зависит от диррективы sql_mode

mysql> SELECT nid, title, uid, STATUS, created FROM node ORDER BY title LIMIT 0, 10;
+-----+----------------------------+-----+--------+------------+
| nid | title                      | uid | STATUS | created    |
+-----+----------------------------+-----+--------+------------+
| 101 | 123123                     |   1 |      1 | 1509125814 |
|  21 | Abdo                       |   7 |      1 | 1507065945 |
|  74 | Abdo                       |  11 |      1 | 1507065945 |
|  47 | Abico                      |   0 |      1 | 1507065945 |
|  16 | Abico Praesent Vereor Wisi |   4 |      1 | 1507065945 |
|  33 | Abigo                      |   3 |      1 | 1507065945 |
|  61 | Abigo                      |   0 |      1 | 1507065945 |
|  78 | Abigo Lucidus Refoveo      |   7 |      1 | 1507065945 |
|  49 | Abluo Causa                |   9 |      1 | 1507065945 |
| 100 | Abluo Causa                |   0 |      1 | 1507065945 |
+-----+----------------------------+-----+--------+------------+
10 ROWS IN SET (0,00 sec)

mysql> SELECT nid, title, uid, STATUS, created FROM node GROUP BY title ORDER BY title LIMIT 0, 10;
ERROR 1055 (42000): Expression #1 OF SELECT list IS NOT IN GROUP BY clause AND contains nonaggregated COLUMN 'drupal_ru_test.node.nid' which IS NOT functionally dependent ON COLUMNS IN GROUP BY clause; this IS incompatible WITH sql_mode=only_full_group_by

mysql> SELECT @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode                                                                                                                                |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+

mysql> SET sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
Query OK, 0 ROWS affected (0,00 sec)

mysql> SELECT nid, title, uid, STATUS, created FROM node GROUP BY title ORDER BY title LIMIT 0, 10;
+-----+-------------------------------------------+-----+--------+------------+
| nid | title                                     | uid | STATUS | created    |
+-----+-------------------------------------------+-----+--------+------------+
| 101 | 123123                                    |   1 |      1 | 1509125814 |
|  21 | Abdo                                      |   7 |      1 | 1507065945 |
|  47 | Abico                                     |   0 |      1 | 1507065945 |
|  16 | Abico Praesent Vereor Wisi                |   4 |      1 | 1507065945 |
|  33 | Abigo                                     |   3 |      1 | 1507065945 |
|  78 | Abigo Lucidus Refoveo                     |   7 |      1 | 1507065945 |
|  49 | Abluo Causa                               |   9 |      1 | 1507065945 |
|  34 | Acsi Aliquam At Magna                     |   6 |      1 | 1507065945 |
|  15 | Acsi Aliquip Autem Dolor                  |   5 |      1 | 1507065945 |
|  68 | Acsi Gravis Quadrum Quidem Rusticus Tamen |   0 |      1 | 1507065945 |
+-----+-------------------------------------------+-----+--------+------------+
10 ROWS IN SET (0,00 sec)