Mysqli извлекает несколько различных значений из строк, где данное значение находится в любом столбце - PullRequest
1 голос
/ 04 октября 2019

У меня есть такая таблица данных. Более точное описание данных.

col0  |  col1 |  col2  |  col3  | col4
======================================
milk  | egg   | juice  |        |
egg   | juice |        |        |
bread | jam   | juice  |        |
wheat | egg   | juice  |        |
jam   | juice |        |        |

Я хочу сначала найти Сок во всех столбцах и извлечь все строки, в которых обнаружен сок. Затем я должен получить строки с наиболее уникальными и полными данными. В данном случае это первая строка, так как она содержит самый уникальный и полный набор данных без повторяющихся слов. Итак, по этим данным, если я ищу «сок», то я хочу получить этот результат

 milk  | egg   | juice  |
 bread | jam   | juice  |
 wheat | egg   | juice  |

Я пытался GROUP BY и DISTINCT для всех комбинаций столбцов, но не смог получить желаемый результат. результат. Я использовал это утверждение

SELECT * FROM `table` 
WHERE `col4` = 'juice' OR`col3` = 'juice' OR `col2` = 'juice' OR `col1` = 'juice' 
group by `col2`,`col1`,`col0`;

Я бы предпочел, чтобы оно было в одном утверждении, а не в отдельных.

Ответы [ 3 ]

0 голосов
/ 04 октября 2019

Если у вас всегда есть «наиболее полные данные» в старшем номере столбца (col4> col3 и т. Д.),

Вы можете просто LIMIT привести к 1:

SELECT * FROM `table` 
WHERE `col4` = 'juice' OR`col3` = 'juice' OR `col2` = 'juice' OR `col1` = 'juice'
LIMIT 1;
0 голосов
/ 04 октября 2019

Если в нескольких столбцах нет повторяющихся значений, и пустые столбцы представлены с использованием NULL, то мы можем использовать неявное приведение типов логического значения к int с помощью MySQL:

SELECT * 
FROM your_table 
WHERE 'juice' IN (col1, col2, col3, col4) 
ORDER BY ( (col1 IS NOT NULL) + 
           (col2 IS NOT NULL) +
           (col3 IS NOT NULL) +
           (col4 IS NOT NULL) ) DESC
LIMIT 1

Результат

| col0 | col1 | col2  | col3 | col4 |
| ---- | ---- | ----- | ---- | ---- |
| milk | egg  | juice |      |      |

Показать на БД Fiddle

0 голосов
/ 04 октября 2019

Вы можете использовать функцию GROUP_CONCAT.

Возвращает строку с объединенным ненулевым значением из группы.

...