2 / 2 / 2
Регистрация: 17.09.2015
Сообщений: 53
|
|
1 | |
Добавление нескольких городов!20.09.2016, 16:37. Показов 863. Ответов 20
Метки нет (Все метки)
Добрый день!
Есть такая задача, сайт сделан для нескольких городов (точнее из 27 на данный момент и планируют расширяться), при добавлении новости нужно выбрать несколько городов где она будет отображаться. Подскажите как реализовать лучше занесение списка городов в таблицу новости, как правильно вывести информацию и как упростить эту систему при добавлении нового города Заранее спасибо!
0
|
20.09.2016, 16:37 | |
Ответы с готовыми решениями:
20
Добавление нескольких Городов Одновременно Добавление нескольких строк из нескольких input text ов в БД Добавление пустых строк вверх и вниз и добавление нескольких цифр в ячейки Существует N городов для каждой пары городов (і, j) можно построить путь |
2169 / 1652 / 840
Регистрация: 10.01.2015
Сообщений: 5,190
|
|
20.09.2016, 17:22 | 2 |
Можно через
select multiple , можно через checkbox и передавать массивом.Заносить можно, отделяя названия каким-либо символом. implode(',', $city); Выводить из базы можно через explode(',', $city);
1
|
5753 / 4133 / 1507
Регистрация: 06.01.2011
Сообщений: 11,276
|
|
20.09.2016, 17:48 | 3 |
Если следовать нормализации, то нужно сделать отношение многие-ко-многим. То есть делаем промежуточную таблицу с полями:
city_id, news_id И через неё связываем те две таблицы (города/новости).
1
|
22 / 22 / 5
Регистрация: 05.06.2015
Сообщений: 188
|
|
21.09.2016, 15:42 | 4 |
Вот кстати прозвучало два подходящих ответа на вопрос ТС. НО!
На работе мы используем систему предложенную Пифагор. А в проектах, во времена учебы, мы использовали метод предложенный Para bellum. И теперь мне интересно. А правильно то как?
0
|
451 / 417 / 115
Регистрация: 15.02.2012
Сообщений: 1,847
|
|
21.09.2016, 16:03 | 5 |
конечно лучше иметь отдельную линковочную таблицу чем отдельное свойство с перечислением там в виде строки или например сериализованного массива: в этом случае для обновления вам не понадобится получить сначала значение, затем его разобрать, изменить и опять сохранить
0
|
5753 / 4133 / 1507
Регистрация: 06.01.2011
Сообщений: 11,276
|
|
21.09.2016, 17:04 | 6 |
dezforse, где-то читал, что в Twitter используется вариант Пифагора. Для сбережения ресурсов, ибо посещаемость большая.
Но удобнее использовать связку через промежуточную таблицу. FOREIGN KEY с ON DELETE CASCADE дают огромное удобство. А если хранить перечисление -- то нужно отслеживать все зависимости дочерних таблицах. Если посещаемость не миллионная -- то лучше через промежуточную.
1
|
22 / 22 / 5
Регистрация: 05.06.2015
Сообщений: 188
|
|
22.09.2016, 10:44 | 7 |
Para bellum, Спасибо за советы, буду использовать предложенные вами методы!
0
|
2 / 2 / 2
Регистрация: 17.09.2015
Сообщений: 53
|
|||||||||||
24.09.2016, 20:40 [ТС] | 8 | ||||||||||
Добрый вечер!
Организовал запись в базу следующим образом:
Теперь вот не могу разобраться как вывести новость, как сделать проверку на город? если выбран город с ид2, выводим новость, если нет ид2 не выводим. Заранее спасибо
0
|
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,211
|
|
24.09.2016, 22:41 | 9 |
0
|
392 / 294 / 121
Регистрация: 26.08.2016
Сообщений: 902
|
|
24.09.2016, 23:06 | 10 |
Посмотрите список функций работы со строками. Подойдет например strpos, возвращающая позицию подстроки в строке. Если позиция не равна -1, значит id города в строке есть.
Добавлено через 6 минут Сорри, если речь идет об отборе из базы, то смотреть нужно функции mySQL, в данном случае INSTR и проверять условие в запросе. С ростом числа новостей будет увеличиваться время выборки при таком способе хранения.
0
|
5753 / 4133 / 1507
Регистрация: 06.01.2011
Сообщений: 11,276
|
|
25.09.2016, 06:42 | 11 |
И плюс ещё -- что будет, если попробовать найти в данном перечислении город с ID "7":
17,9,3,87 и т.д. Хотя ID "7" нет -- запись выберется.
0
|
392 / 294 / 121
Регистрация: 26.08.2016
Сообщений: 902
|
|
25.09.2016, 07:41 | 12 |
Para bellum, Ну тут можно записывать строку в виде ,17,9,3,87, и искать в виде ,id,
0
|
5753 / 4133 / 1507
Регистрация: 06.01.2011
Сообщений: 11,276
|
|
25.09.2016, 07:55 | 13 |
Да, можно. Но не очень удачное решение, на мой взгляд.
Блин, совсем забыл. Есть же FIND_IN_SET для поиска по перечислениям.
0
|
392 / 294 / 121
Регистрация: 26.08.2016
Сообщений: 902
|
|
25.09.2016, 08:07 | 14 |
Если это будет отрабатываться в пределах секунды и не предполагается в будущем большого количества новостей, то решение как решение, ничего страшного. Нужно просто провести тесты с какого количества новостей начнет заметно тормозить и прикинуть планируется ли на сайте такое количество новостей в обозримые 20 лет.
Если FIND_IN_SET работает с любым строковым полем, то можно и его использовать, хотя непонятно в чем выгода.Если же вы имеете ввиду что список городов будет храниться в сете перечислений, то это те же запятые, вид сбоку, да еще с неудобствами. ограничение на кол-во возможных значений в 64 варианта, необходимость пополнять набор при вводе нового города. Не вижу в данном конкретном случае преимуществ
0
|
5753 / 4133 / 1507
Регистрация: 06.01.2011
Сообщений: 11,276
|
|
25.09.2016, 08:19 | 15 |
0
|
392 / 294 / 121
Регистрация: 26.08.2016
Сообщений: 902
|
|
25.09.2016, 09:24 | 16 |
Тип SET это тот же ENUM, Просто с возможностью выбирать несколько значений. И в том и в другом случае никаких строк в поле не хранится. В поле хранится число. В случае с ENUM это будет порядковый номер значения набора, в случае с SET это будет сумма номеров, составленная по принципу 2^значение1 + 2^значение2 ... + 2^значение№, то есть если пользователь выбрал 1е 2е и 4е значения набора, в базе будет храниться число 1 + 2 + 8, то есть 11. Отсюда ограничение на количество значений в наборе, чтобы уложиться в длину числа 2 в степени 64, кажется это Int. Есть ли ограничения для ENUM честно говоря не знаю. По логике быть не должно.
0
|
5753 / 4133 / 1507
Регистрация: 06.01.2011
Сообщений: 11,276
|
|
25.09.2016, 09:34 | 17 |
Всё верно. Я обмишулился.
0
|
2 / 2 / 2
Регистрация: 17.09.2015
Сообщений: 53
|
||||||
13.10.2016, 18:44 [ТС] | 18 | |||||
Добрый день!
Подскажите еще момент такой момент В базу заносит в текстовое поле ид городов через запятую, как мне вывести отмеченные города в виде
0
|
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,211
|
||||||
13.10.2016, 18:49 | 19 | |||||
0
|
2 / 2 / 2
Регистрация: 17.09.2015
Сообщений: 53
|
|
13.10.2016, 19:01 [ТС] | 20 |
Подскажите как правильно реализовать?
0
|
13.10.2016, 19:01 | |
13.10.2016, 19:01 | |
Помогаю со студенческими работами здесь
20
Известны расстояния от Москвы до нескольких городов. Найти расстояние от Москвы до самого удаленного от нее города из пр Задан список городов. Поменять местами названия любых двух городов, заканчивающихся буквой "а". добавление нескольких селектов Добавление нескольких файлов в БД Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |