|
|
|
| Суть: у меня есть куча информации и она строго разделена - какую можно показывать для какой страны.
Я вижу несколько вариантов:
1. Структура базы:
Минусы: Огромное количество строк, так как для одной 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 - коды стран через разделитель. Минусы - те же, что и в третьем варианте.
Может быть... кто-нибудь.... что-нибудь... подскажет? | |
|
|
|
|
|
|
|
для: Shorr Kan
(02.05.2006 в 13:04)
| | в столбец country писать id стран в виде списка - 1,2,55,66,... и т.д.
сами страны - в таблице countries, где есть столбец id и название страны.
выборку можно будет оператором IN | |
|
|
|
|
|
|
|
для: elenaki
(02.05.2006 в 13:28)
| | Вы хотите сказать, что при помощи IN можно делать выборку в строковом списке? Я не пользовался этим оператором... пока что ищу доку... может быть - пример покажете? | |
|
|
|
|
|
|
|
для: Shorr Kan
(02.05.2006 в 13:51)
| |
SELECT * FROM table WHERE country_id IN (1, 5, 25)
|
| |
|
|
|
|
|
|
|
для: Loki
(02.05.2006 в 13:57)
| | Не очень понял, как он работает. Я сделал:
Сперва запрос: SELECT * FROM 'countries' WHERE cid IN ( 1, 5, 108 ) - сработал на "ура". Вывел обе строки.
Второй запрос: SELECT * FROM 'countries' WHERE cid IN ( 5, 66 ) - по моему разумению, должен был вывести первую строчку. Но не вывел никакую. Так как же он работает-то? | |
|
|
|
|
|
|
|
для: 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" | |
|
|
|
|
|
|
|
для: elenaki
(02.05.2006 в 14:13)
| | Поменял под свою табличку... select * from countries where (cid IN (66)) - ноль строк вернул... | |
|
|
|
|
|
|
|
для: 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 )) - густо
Как же он... работает? | |
|
|
|
|
|
|
|
для: Shorr Kan
(02.05.2006 в 15:16)
| | BOT TAK: | |
|
|
|
|
|
|
|
для: elenaki
(02.05.2006 в 16:05)
| | Удивительно. Именно так он и должен работать, по моему пониманию. Но у меня он работает на первую цифру - я выше уже описал. Ладно... у меня есть уточняющий вопрос... чем это отличается от LIKE? Как-то мне cheops говорил, что это будет очень натужно работать.
Собственно... меня вот что интересует - не будет ли проще и быстрее такая структура?
id_info | country | a | b
То есть, четыре столбца. Второй - VARCHAR, остальные - INT. Причем, относительно короткие - до шестизначных чисел. Не будет ли подобная таблица быстрее и лучше? Строк будет уйма.... миллионы. Но как я понимаю - mysql не количество строк важно, а объем таблицы?
Просто я, к сожалению, не знаком вплотную с возможностями и потребностями... а вернее - с их сочетанием. | |
|
|
|