|
Объединить вывод по максимальному количеству
|
|||
---|---|---|---|
#18+
Всем хорошего времени суток, уже которую ночь бьюсь над тайной. Я делаю вывод SELECT username FROM profiles Их у меня 17, условно. Он их выводит в 17 строчек, что логично. После объединения GROUP_CONCAT - он их выводит в одну строчку. Как ограничить кол-во вывода. Мне нужно чтобы в одной строчке было МАКСИМУМ 5. Взял из примера по топику create table t1 ( pk integer primary key, name text not null, somedata integer null ); insert into t1 values ( 1, "john", 5 ); insert into t1 values ( 2, "mary", 3 ); insert into t1 values ( 3, "john", 4 ); insert into t1 values ( 4, "mike", 3 ); insert into t1 values ( 5, "jake", 4 ); insert into t1 values ( 6, "max", 4 ); insert into t1 values ( 7, "jon", 4 ); И так далее Обычным селектом ( select name from t1 ) Будет: john mary john mike jake max jon Через GROUP_CONCAT это всё будет - select group_concat('@' || + name, ' ') @john @mary @john @mike @jake @max @jon А как мне сделать, чтобы было ограничение по 5 в строке, то есть @john @mary @john @mike @jake @max @jon То есть если меньше, то ок, если больше. чтоб переносилось на другую строчку.. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 02:56 |
|
Объединить вывод по максимальному количеству
|
|||
---|---|---|---|
#18+
TOP 5 это делается Но в диалектах надо уточнить. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 04:00 |
|
Объединить вывод по максимальному количеству
|
|||
---|---|---|---|
#18+
Вру. не дочитал до конца ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 04:01 |
|
Объединить вывод по максимальному количеству
|
|||
---|---|---|---|
#18+
fallmist42, для начала нужно ввести в выборку поле-нумератор (или ранкатор?), которое будет делить всю выборку на части в нужное число строк. Далее - делать группировку по этому полю.... То есть, от такого вида таблицы:ID NAME1 "john"2 "mary"3 "john"4 "mike"5 "jake"6 "max"7 "jon" Получить такую: Rnk NAME1 "john"1 "mary"1 "john"1 "mike"1 "jake"2 "max"2 "jon"и уже по ней делать Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 04:36 |
|
Объединить вывод по максимальному количеству
|
|||
---|---|---|---|
#18+
Щукина Анна, не-а, вообще не принципиально. Просто выводить сгруппированным через конкат по 5 штук, в одной строчке. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 07:13 |
|
Объединить вывод по максимальному количеству
|
|||
---|---|---|---|
#18+
Плюс, у меня нету такого поля как rank. Если его вводить дополнительно, то тогда надо будет каждый раз его в бд прописывать, что не есть комильфо. Можно сделать конечно супер запрос с подзапросом, чтоб он при добавлении проверял по ранку, если уже есть 5 и т.д., то идти дальше, НО Это не будет верным решением. Вся фишка в том, что эта выборка ещё с условиями, там потом идёт WHERE Следовательно костыль с Rnk не будет верным. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 07:44 |
|
Объединить вывод по максимальному количеству
|
|||
---|---|---|---|
#18+
fallmist42, Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 10:06 |
|
Объединить вывод по максимальному количеству
|
|||
---|---|---|---|
#18+
не на 6 делить надо Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 10:07 |
|
Объединить вывод по максимальному количеству
|
|||
---|---|---|---|
#18+
pit_alex, воот Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 10:21 |
|
Объединить вывод по максимальному количеству
|
|||
---|---|---|---|
#18+
pit_alex, огромнейшее спасибо, совсем забыл о присвоении rowid внутри бд. SELECT group_concat(name) FROM t1 group by (rowid/6) вот это правильно группирует, ровно по 5, если меньше, то оставляет сколько есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 10:47 |
|
Объединить вывод по максимальному количеству
|
|||
---|---|---|---|
#18+
pit_alex, SELECT group_concat(name) FROM t1 group by ((rowid - 1)/5) Я не совсем понял, а что вот это делает:? зачем он из rowid вычитает единицу, ведь нумерация начинается с 1, или это вы убираете последнюю строчку :? И да, почему на 6 надо в итоге, а не на 5, ведь лоджик же. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 11:04 |
|
Объединить вывод по максимальному количеству
|
|||
---|---|---|---|
#18+
fallmist42, последний вариант правильный, так как если делить на 5 то в 1 строке будет 4 записи Код: sql 1. 2. 3. 4. 5. 6.
а если Код: sql 1.
то Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 11:15 |
|
Объединить вывод по максимальному количеству
|
|||
---|---|---|---|
#18+
таки нет не rowid, надо подзапрос если будут удаления в таблице то в rowid будут "дырки" Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 12:35 |
|
Объединить вывод по максимальному количеству
|
|||
---|---|---|---|
#18+
pit_alex, разве rowid - не присваиваемый номер строчки при выводы информации :? Это же просто порядковый номер строчки именно в скуле. Ну то есть если выводить без конката и без гроуп, то тогда, они в столбик будут, все строчки, вот им и присваивается значение rowid ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 13:24 |
|
Объединить вывод по максимальному количеству
|
|||
---|---|---|---|
#18+
pit_alex, затестил последний, с выводом rowid, так вот. Дырки есть, но группирует всё равно правильному, если по старому. Есть мысли в какой момент всё "пойдёт ко дну" :? Бд пока не большая, так что не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 13:32 |
|
Объединить вывод по максимальному количеству
|
|||
---|---|---|---|
#18+
fallmist42Плюс, у меня нету такого поля как rank. Если его вводить дополнительно, то тогда надо будет каждый раз его в бд прописывать, что не есть комильфо. 1) нет поля - сделай 2) если это надо только для одного запроса - копируй данные в дополнительную таблицу. Читай https://www.sqlite.org/lang_createtable.html про TEMP 3) Все тоже самое можно сделать и на клиенте и не издеваться над базой данных. Вытащи простой список в массив на клиенте и там склеивай в цикле - сможешь не только по количеству строк контролировать, но и по длине полученных строк. fallmist42разве rowid - не присваиваемый номер строчки при выводы информации :? Это же просто порядковый номер строчки именно в скуле.нет. нет. Читай документацию: https://www.sqlite.org/lang_createtable.html#rowid fallmist42Есть мысли в какой момент всё "пойдёт ко дну" :?Когда количество "дырок" в нумерации rowid превысит терпение юзера. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2018, 00:28 |
|
|
start [/forum/topic.php?fid=54&fpage=4&tid=2008456]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 21ms |
total: | 148ms |
0 / 0 |