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

Форум MySQL

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Как организовать соответствие страны и информации?
 
 автор: Shorr Kan   (02.05.2006 в 13:04)   письмо автору
 
 

Суть: у меня есть куча информации и она строго разделена - какую можно показывать для какой страны.

Я вижу несколько вариантов:

1. Структура базы:
id_info | country

Минусы: Огромное количество строк, так как для одной id_info может получится до ~250 стран. Хотя может быть и одна.... А этих id_info будет очень много.

2. Структура базы:
id_info | RU | US | US | IT...

и так далее. Код страны = имя столбца. А ниже, в каждом столбце - какие-то страны установить в единичку, а какие-то - в нолик.
Минусы: большое количество столбцов. Не будет ли очччень медленно?

3. Создаем каталог, с именем, равным id_info. В него кидаем пусые файлы. Имя файла = имени страны. То есть, файл RU, файл UA, и так далее. И потом проверять при помощи file_exists.
Минусы: Нельзя сделать выборку информации из базы, используя WHERE. То есть, придется проходиться по всей базе, поочередно проверяя наличие файла в соответствующем каталоге. А это явно долго...

4. Вариация третьего варианта. Писать не в каталог id_info имена файлов, а писать в файл, с именем id_info - коды стран через разделитель. Минусы - те же, что и в третьем варианте.

Может быть... кто-нибудь.... что-нибудь... подскажет?

   
 
 автор: elenaki   (02.05.2006 в 13:28)   письмо автору
 
   для: Shorr Kan   (02.05.2006 в 13:04)
 

в столбец country писать id стран в виде списка - 1,2,55,66,... и т.д.
сами страны - в таблице countries, где есть столбец id и название страны.
выборку можно будет оператором IN

   
 
 автор: Shorr Kan   (02.05.2006 в 13:51)   письмо автору
 
   для: elenaki   (02.05.2006 в 13:28)
 

Вы хотите сказать, что при помощи IN можно делать выборку в строковом списке? Я не пользовался этим оператором... пока что ищу доку... может быть - пример покажете?

   
 
 автор: Loki   (02.05.2006 в 13:57)   письмо автору
 
   для: Shorr Kan   (02.05.2006 в 13:51)
 


SELECT * FROM table WHERE country_id IN (1, 5, 25)

   
 
 автор: Shorr Kan   (02.05.2006 в 14:18)   письмо автору
 
   для: Loki   (02.05.2006 в 13:57)
 

Не очень понял, как он работает. Я сделал:



2      1,2,55,66,108
3     1,108


Сперва запрос: SELECT * FROM 'countries' WHERE cid IN ( 1, 5, 108 ) - сработал на "ура". Вывел обе строки.
Второй запрос: SELECT * FROM 'countries' WHERE cid IN ( 5, 66 ) - по моему разумению, должен был вывести первую строчку. Но не вывел никакую. Так как же он работает-то?

   
 
 автор: elenaki   (02.05.2006 в 14:13)   письмо автору
 
   для: Shorr Kan   (02.05.2006 в 13:51)
 


select * from pr_programms where (pr_nomos = -2 OR pr_nomos IN (5)) 


находит и строки, где pr_nomos = -2, и строки, где pr_nomos = "5", и строки, где pr_nomos = "5,6,7,8"

   
 
 автор: Shorr Kan   (02.05.2006 в 14:21)   письмо автору
 
   для: elenaki   (02.05.2006 в 14:13)
 

Поменял под свою табличку... select * from countries where (cid IN (66)) - ноль строк вернул...

   
 
 автор: Shorr Kan   (02.05.2006 в 15:16)   письмо автору
 
   для: Shorr Kan   (02.05.2006 в 14:21)
 

Сложилось впечатление, что ищется только до первой запятой... то есть, в вашем примере.... где pr_nomos = "5,6,7,8" - да, найдет... а где pr_nomos = "6,7,5,8" - уже нет.

Я не утверждаю, конечно... но у меня выходит именно так.
======================
Проверил, так и есть...

SELECT * FROM countries WHERE (cid IN ( 108 )) - пусто
SELECT * FROM countries WHERE (cid IN ( 1 )) - густо

Как же он... работает?

   
 
 автор: elenaki   (02.05.2006 в 16:05)   письмо автору
 
   для: Shorr Kan   (02.05.2006 в 15:16)
 

BOT TAK:

   
 
 автор: Shorr Kan   (02.05.2006 в 19:58)   письмо автору
 
   для: elenaki   (02.05.2006 в 16:05)
 

Удивительно. Именно так он и должен работать, по моему пониманию. Но у меня он работает на первую цифру - я выше уже описал. Ладно... у меня есть уточняющий вопрос... чем это отличается от LIKE? Как-то мне cheops говорил, что это будет очень натужно работать.

Собственно... меня вот что интересует - не будет ли проще и быстрее такая структура?

id_info | country | a | b

То есть, четыре столбца. Второй - VARCHAR, остальные - INT. Причем, относительно короткие - до шестизначных чисел. Не будет ли подобная таблица быстрее и лучше? Строк будет уйма.... миллионы. Но как я понимаю - mysql не количество строк важно, а объем таблицы?

Просто я, к сожалению, не знаком вплотную с возможностями и потребностями... а вернее - с их сочетанием.

   
Rambler's Top100
вверх

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