Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: поля с параметрами, разделенными запятыми или несколько таблиц?

Сообщения:  [1-10]   [11-15] 

 
 автор: Lotanaen   (10.05.2011 в 12:56)   письмо автору
 
   для: exc   (06.05.2011 в 13:31)
 

я же привел выше код вывода списка городов...

  Ответить  
 
 автор: exc   (06.05.2011 в 13:31)   письмо автору
 
   для: Lotanaen   (06.05.2011 в 13:21)
 

Да, но это если "Нижний Новгород", а в моем варианте - цифровые ключи. Причем окруженные с обеих сторон разделителями. В этом случае даже ;Новгород; и ;Нижний Новгород; всегда выберется верно.
Но в любом случае, спасибо. Буду размышлять.

UPD:
И все-равно не пойму.
Например ключи городов у компании - 1, 3
получаем значение в базу - 10 (2+8)
Как теперь достав из базы 10ку вывести города компании (1 и 3) неужели корнями?

  Ответить  
 
 автор: Lotanaen   (06.05.2011 в 13:21)   письмо автору
 
   для: exc   (06.05.2011 в 13:01)
 

>А как теперь при отображении информации о компании выяснить города, к которым она относится?

Вот этот код приведенный мною раньше:
foreach ($gorod as $key=>$value) {

   if ($town & pow(2,$key)) //$town - значение город из таблицы компаний
      echo $value;


>И по ходу дискуссии у меня возник вопрос - неужели LIKE так плох? Или просто в данном случае неуместен?

like не будет всегда точен (например: Новгород и Нижний Новгород - как правильно выбрать Новгород?) и работает медленее.

  Ответить  
 
 автор: exc   (06.05.2011 в 13:01)   письмо автору
 
   для: Lotanaen   (06.05.2011 в 12:47)
 

Большое спасибо за разъяснения.
А как теперь при отображении информации о компании выяснить города, к которым она относится?

И по ходу дискуссии у меня возник вопрос - неужели LIKE так плох? Или просто в данном случае неуместен?

  Ответить  
 
 автор: Lotanaen   (06.05.2011 в 12:47)   письмо автору
 
   для: exc   (06.05.2011 в 12:02)
 

а выборку в таблице аналогично:

$sql = "select * from comp where gorod & ".pow(2,3).">0";
$res = mysql_query($sql);

  Ответить  
 
 автор: Lotanaen   (06.05.2011 в 12:22)   письмо автору
 
   для: 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);

  Ответить  
 
 автор: exc   (06.05.2011 в 12:02)   письмо автору
 
   для: Lotanaen   (06.05.2011 в 11:21)
 

Да, думаю что даже более 15 их никогда не будет. Например, города это муниципалитеты некоего района. А как часто в районах тусуются или добавляются/удаляются муниципалитеты? Поэтому эти три "набора свойств" компании - города, деятельность и категория - достаточно статичные и практически неизменные величины, почему я изначально и не планировал заносить их в бд и выделять отдельные таблицы. Если бы их число или названия менялись, то несомненно было-бы логично засунуть их в бд и организовать удобный интерфейс управления. Но ход моих мыслей был таков - засунуть их однажды в конфиг и использовать в режиме чтения, и, возможно, раз в год и придется что-то добавить ручками.

А "сумму двоек в степенях ключей массивов" это как? (если возможно, с примером) И как заносить и выбирать их?

У меня была мысль ключи в двоичной системе, правда в режиме ноль/единица (например, есть 8 городов в списке - имеем 8 активных бит поля "город" в таблице компаний, и если у компании отмечены 3 и 5 города - 3 и 5 бит единицы, остальные нули. Как то так.), а не двоек в степени ключа. Как формировать представляю, а как выбирать - пока нет. Например, как выбрать все компании, у которых 3й бит (или 3й и 5й) в поле "город" - единица.

  Ответить  
 
 автор: Lotanaen   (06.05.2011 в 11:21)   письмо автору
 
   для: exc   (06.05.2011 в 11:09)
 

ну если их в будущем никогда не будет более 30, то как вариант могу предложить работать с массивами, а в таблице компаний сделать соответствующие поля типа bigint и в них применить так сказать двоичную систему... т.е. сумму двоек в степенях ключей массивов. тогда никаких доптаблиц не понадобится

  Ответить  
 
 автор: exc   (06.05.2011 в 11:09)   письмо автору
 
   для: Lotanaen   (06.05.2011 в 10:52)
 

Сейчас они статичны и имеют по 8 разнообразий каждый. Ранее я говорил, что их число до 15 (брал с запасом), но в настоящий момент по 8 и изменений не планируется.

  Ответить  
 
 автор: Lotanaen   (06.05.2011 в 10:52)   письмо автору
 
   для: exc   (06.05.2011 в 10:42)
 

а как много разнообразий в будущем возможно для городов, видов деятельности и т.п. доп данных? т.е. сейчас ваши массивы статичны или динамичны?

  Ответить  

Сообщения:  [1-10]   [11-15] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования