[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Объединить записи БД без потери данных
Yakushin
Здравствуйте!
Помогите пожалуйста разобраться с объединение записей.

Например, есть у нас почти одинаковые записи в таблице "tableone".

names years
Иван 20
Иван 25
Владимир 27

Задача в том, чтоб объединить первые две записи потому что у них одинаковые значения "names", объединить нужно так, чтоб не терялись значения years а встели друг за другом через запятую: 20, 25.

Получиться должно так:

names years
Иван 20,25
Владимир 27
Valick
Yakushin, соберите массив на стороне РНР, где names ключ, а years будут значения



_____________
Стимулятор ~yoomoney - 41001303250491
brevis
Наверное есть много способов.
Один из них -- GROUP BY + GROUP_CONCAT.
http://sqlfiddle.com/#!9/7a6de9/1

_____________
Чатик в телеге
Valick
brevis, GROUP_CONCAT ограничен по длинне, поскольку количество иванов в бд ничем не ограничено, я бы не рискнул его использовать


_____________
Стимулятор ~yoomoney - 41001303250491
brevis
Ну может Yakushin рисковый парень.

_____________
Чатик в телеге
depp
Цитата (Valick @ 15.09.2016 - 12:52)
brevis, GROUP_CONCAT ограничен по длинне, поскольку количество иванов в бд ничем не ограничено, я бы не рискнул его использовать

Max Value 4294967295 для 32 битных систем.
Max Value 18446744073709551615 для 64.

SET [GLOBAL | SESSION] group_concat_max_len = val;

чет мне кажется вполне себе вариант.
brevis
Цитата (depp @ 15.09.2016 - 12:11)
Max Value 4294967295 для 32 битных систем.
Max Value 18446744073709551615 для 64.

Это что-то очень похоже на значение инта.
Ну а вообще да, или настроить group_concat_max_len в конфиге, или перед запростом устанавливать.

_____________
Чатик в телеге
Valick
brevis, да я не против, более того если это используется в подзапросе, то без вариантов GROUP_CONCAT, но за длинной надо следить.
Если для вывода, то можно не забивать себе голову настройками и использовать что-то вроде
<?php
function
arr_implode($value){
return implode(',',$value);
}

$query = "SELECT * FROM users";
$res = mysql_query($query);
while($row = mysql_fetch_assoc($res)){
$arr[$row['names']][]= $row['years'];
}

echo '<pre>';
print_r($arr);
echo '</pre>';
//foreach($arr as $key=>$value) $arr[$key] = implode(',',$value);
$arr = array_map('arr_implode',$arr);
echo '<pre>';
print_r($arr);
echo '</pre>';
?>


_____________
Стимулятор ~yoomoney - 41001303250491
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.