@viktorross

Как выводить и записывать значения в mysql через запятую или |?

Здравствуйте, подскажите пожалуйста, как мне нужно записывать и выводить значения в одну строку через какой-нибудь символ разделителя, я допустим вывожу цикл сейчас вот так

function get_X($id) {

global $db;

$x_user=$db->fetchAssocList("select `нужная строка` from `class_users` where `user_id`='777'");

return $x_user;

}


так вот в этой строке лежит запись 123, 124, 125 и т.д
мне нужно чтобы при выводе цикла получалось так, что каждое число до запятой выводилось в итоге как новая строка

Возможно так будет удобнее это реализовать

function get_X($id) {

global $db;

$result=$db->query ("select `нужная строка` from `class_users` where `user_id`='777'");

while($row = $db->fetchAssocRes($result)) {

      $нужная строка = $row['id'];
}
return $x_user;

}


Также подскажите пожалуйста какой запрос будет добавлять в строку через запятую число, а не обновлять всю запись целиком

$add_number=$db->query("UPDATE `class_users` SET `нужная строка` = `нужная строка`+ ,123"); -что тут я не знаю


кто-нибудь знает как это делать?
  • Вопрос задан
  • 874 просмотра
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Не должно быть в одной ячейке таблицы сразу несколько значений - это один из основных принципов реляционных баз данных.
Сделать такое, конечно, можно, но это будет говнокодом и в приличном обществе за такое бьют канделябрами.
По хорошему, вам надо создать отдельную таблицу, связанную с основной отношением многие-к-одному.
Ответ написан
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
UPDATE `class_users` SET `нужная строка` = CONCAT(`нужная строка`, ',123')


Так же есть функция FIND_IN_SET() которая позволяет искать значение в строке разделённой запятыми, чтобы не прибегать к использованию LIKE '%...%'

Как уже ответили ранее, подобные трюки являются анти-шаблонами.
Я считаю что допустимо подобный подход использовать чтобы компактно хранить список чего-то (денормализация). Но если вы потом по значениям из списка захотите что-то искать или фильтровать, то это всегда будет FULL SCAN запрос, который в 999999999 раз будет медленнее и грузовее для CPU нежели если бы вы хранили основную запись и связанные списки отдельно, так как во втором случае возможно эффективно использовать индексы для поиска.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы