Использование 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
Мне нужен такой же тип возврата для любого типа поискового запроса.
Так что, если я только что искал, где 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)
Задача ещё не решена.
Других решений пока нет …