MySQL альтернативно group_concat?

Использование group_concat, очевидно, имеет ограничение по размеру …. поэтому я ищу другой способ добиться этого.

Структура базы данных:

John Doe CA  Col1   Col2   Col3
John Doe CA  Col1   Col2   Col3
John Doe CA  Col1   Col2   Col3
Jane Doe CA  Col1   Col2   Col3
Jane Doe CA  Col1   Col2   Col3
John Doe NY  Col1   Col2   Col3
John Doe NY  Col1   Col2   Col3
Jenny Doe WI  Col1   Col2   Col3
Billy Bob PA  Col1   Col2   Col3
Billy Bob PA  Col1   Col2   Col3
John Doe WA  Col1   Col2   Col3
Peter Paul FL  Col1   Col2   Col3
Peter Paul FL  Col1   Col2   Col3
Peter Paul FL  Col1   Col2   Col3
Peter Paul FL  Col1   Col2   Col3

При выполнении поиска мне нужно вернуть любого, который соответствует критериям поиска, но мне нужно, чтобы данные были сгруппированы / организованы определенным образом.

Используя приведенную выше схему / макет таблицы.

Если бы я искал имя Джон Доу ..

Я должен был бы вернуть ОБА Джону Доу / Калифорния & Джон Доу / NY ТОЛЬКО ОДИН РАЗ! (Каждый) …

но почему-то также есть все поля / столбцы (col1, col2, col3 … и т. д.) для ВСЕХ строк, связанных с этим соответствием имени / состояния.

(извините, мне трудно объяснить это правильно, я думаю)

Используя тот же поиск, что и выше, Джон Доу (например)

Я ожидаю что-то вроде:

  • Джон Доу / Калифорния
  • Col1 Col2 Col3
  • Col1 Col2 Col3
  • Col1 Col2 Col3
  • Col1 Col2 Col3
  • Col1 Col2 Col3

* Джон Доу / Нью-Йорк
* Col1 Col2 Col3
* Col1 Col2 Col3

Мне нужен такой же тип возврата для любого типа поискового запроса.

Так что, если я только что искал, где state = ‘CA’;

Мне нужно было бы вернуть все совпадения CA, как указано выше:

1.) Одно имя / штат

2.) Все столбцы из всех записей, которые соответствуют этим критериям

John Doe / CA
* Col1   Col2   Col3
* Col1   Col2   Col3
* Col1   Col2   Col3
* Col1   Col2   Col3
* Col1   Col2   Col3

Jane Doe / CA
* Col1   Col2   Col3
* Col1   Col2   Col3

Billy Bob / CA
* Col1   Col2   Col3
* Col1   Col2   Col3

Эта попытка:

SELECT *, COUNT(*) as casecount FROM mytable WHERE first LIKE '%John%' AND wstate LIKE '%CA%'group by first,last,state;

Приближается ко мне … Я получаю только 1 ‘имя / состояние’, возвращаемое для каждого ‘совпадения’ (вместо того, чтобы сказать все 5 записей для John Doe / CA)

Немного разные условия поиска:

SELECT *, COUNT(*) as casecount FROM mytable WHERE first LIKE '%John%' group by first,last,state;

Опять же, я получаю только 1 запись «имя / штат», возвращаемую для КАЖДОГО совпадения (вместо 5 записей, возвращаемых для John Doe / CA, и 3 записей, возвращаемых для John Doe / NY).

До этого момента это хорошо служило мне … и я застрял на том, как поступить, чтобы получить то, что мне нужно после этого.

Когда я получаю свой ответ из базы данных .. Я перебираю записи / строки … и отображаю детали в некоторой таблице (чтобы помочь с визуальным отображением информации) …

Но теперь мне нужно сбросить все данные Col1, Col2, Col3 и т. Д. В ячейку / область / заполнитель ниже этих основных данных имени / состояния …

Используя PHP в качестве примера, похоже, что мне нужно перебрать мой массив, а затем сделать еще один вложенный / вложенный цикл для других «записей / строк».

Двигаясь дальше, я попробовал это: (Group_Concat)

SELECT CONCAT(first, ' ', middle, ' ',last) as fullName, GROUP_CONCAT(COl1, '^', Col2, '^', Col3 SEPARATOR '<br>') FROM myTable GROUP BY CONCAT(first, ' ', middle, ' ',last);

Который делает именно то, что я хочу .. (кажется) .. ну, по крайней мере, дает мне данные в один кусок, и я думаю, что я мог бы использовать некоторый PHP, чтобы взорваться < br> а затем еще один взорваться символом ^ …

Проблема в том, что я читал, что есть ограничение на размер использования GROUP_CONCAT? А то, что там нет, не говорит, сколько результатов .. Я не хочу вкладывать деньги во что-то, что не обрезает это … или ошибка … и т.д.

и после некоторой настройки / объединения запросов .. У меня есть этот рабочий запрос:

SELECT *, COUNT(*) as casecount , GROUP_CONCAT(Col1, '^', Col2, '^', Col3 SEPARATOR '<br>') FROM mytable GROUP BY first, middle, last, state;

Какие простые для чтения / понимания альтернативы мне нужны, чтобы получить те же результаты, но не нужно беспокоиться о каком-то предельном размере GROUP_CONCAT ()? (Я все еще новичок в MySQL)

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]