@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"); -что тут я не знаю


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


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

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

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽