|
|
|
|
|
для: exc
(06.05.2011 в 13:31)
| | я же привел выше код вывода списка городов... | |
|
|
|
|
|
|
|
для: Lotanaen
(06.05.2011 в 13:21)
| | Да, но это если "Нижний Новгород", а в моем варианте - цифровые ключи. Причем окруженные с обеих сторон разделителями. В этом случае даже ;Новгород; и ;Нижний Новгород; всегда выберется верно.
Но в любом случае, спасибо. Буду размышлять.
UPD:
И все-равно не пойму.
Например ключи городов у компании - 1, 3
получаем значение в базу - 10 (2+8)
Как теперь достав из базы 10ку вывести города компании (1 и 3) неужели корнями? | |
|
|
|
|
|
|
|
для: exc
(06.05.2011 в 13:01)
| | >А как теперь при отображении информации о компании выяснить города, к которым она относится?
Вот этот код приведенный мною раньше:
foreach ($gorod as $key=>$value) {
if ($town & pow(2,$key)) //$town - значение город из таблицы компаний
echo $value;
}
|
>И по ходу дискуссии у меня возник вопрос - неужели LIKE так плох? Или просто в данном случае неуместен?
like не будет всегда точен (например: Новгород и Нижний Новгород - как правильно выбрать Новгород?) и работает медленее. | |
|
|
|
|
|
|
|
для: Lotanaen
(06.05.2011 в 12:47)
| | Большое спасибо за разъяснения.
А как теперь при отображении информации о компании выяснить города, к которым она относится?
И по ходу дискуссии у меня возник вопрос - неужели LIKE так плох? Или просто в данном случае неуместен? | |
|
|
|
|
|
|
|
для: exc
(06.05.2011 в 12:02)
| | а выборку в таблице аналогично:
$sql = "select * from comp where gorod & ".pow(2,3).">0";
$res = mysql_query($sql);
|
| |
|
|
|
|
|
|
|
для: exc
(06.05.2011 в 12:02)
| | ну в принципе тот же двоичный принцип, только не 1 и 0 пишем в таблицу:
вывод формируем примерно так:
foreach ($gorod as $key=>$value) {
if ($town & pow(2,$key)) //$town - значение город из таблицы компаний
echo $value;
}
|
update в таблицу(аналогично и для вставки) :
$arraytown = array (1,3,5);// массив ключей из массива $gorod, которые соответствуют компании
$town=0;
foreach ($gorod as $key=>$value) {
if (in_array($key,$arraytown))
$town+= pow(2,$key);
}
$sql = "update comp set gorod=$town where id=$id";
$res = mysql_query($sql);
|
| |
|
|
|
|
|
|
|
для: Lotanaen
(06.05.2011 в 11:21)
| | Да, думаю что даже более 15 их никогда не будет. Например, города это муниципалитеты некоего района. А как часто в районах тусуются или добавляются/удаляются муниципалитеты? Поэтому эти три "набора свойств" компании - города, деятельность и категория - достаточно статичные и практически неизменные величины, почему я изначально и не планировал заносить их в бд и выделять отдельные таблицы. Если бы их число или названия менялись, то несомненно было-бы логично засунуть их в бд и организовать удобный интерфейс управления. Но ход моих мыслей был таков - засунуть их однажды в конфиг и использовать в режиме чтения, и, возможно, раз в год и придется что-то добавить ручками.
А "сумму двоек в степенях ключей массивов" это как? (если возможно, с примером) И как заносить и выбирать их?
У меня была мысль ключи в двоичной системе, правда в режиме ноль/единица (например, есть 8 городов в списке - имеем 8 активных бит поля "город" в таблице компаний, и если у компании отмечены 3 и 5 города - 3 и 5 бит единицы, остальные нули. Как то так.), а не двоек в степени ключа. Как формировать представляю, а как выбирать - пока нет. Например, как выбрать все компании, у которых 3й бит (или 3й и 5й) в поле "город" - единица. | |
|
|
|
|
|
|
|
для: exc
(06.05.2011 в 11:09)
| | ну если их в будущем никогда не будет более 30, то как вариант могу предложить работать с массивами, а в таблице компаний сделать соответствующие поля типа bigint и в них применить так сказать двоичную систему... т.е. сумму двоек в степенях ключей массивов. тогда никаких доптаблиц не понадобится | |
|
|
|
|
|
|
|
для: Lotanaen
(06.05.2011 в 10:52)
| | Сейчас они статичны и имеют по 8 разнообразий каждый. Ранее я говорил, что их число до 15 (брал с запасом), но в настоящий момент по 8 и изменений не планируется. | |
|
|
|
|
|
|
|
для: exc
(06.05.2011 в 10:42)
| | а как много разнообразий в будущем возможно для городов, видов деятельности и т.п. доп данных? т.е. сейчас ваши массивы статичны или динамичны? | |
|
|
|
|