Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Как правильно сравнивать данные
balambasik  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 43
Пользователь №: 39255
На форуме: 3 года, 3 месяца, 28 дней
Карма: 1




Доброго дня.

Есть поле Geo. В нем через запятую записаны коды стран RU, UA, US, BY и так далее. Количество стран не определено. От 1 до 249.

Скрипт определяет код страны юзера. Далее нужно выбрать из таблиц строки где этот код страны есть.

Как правильно выбрать такие строки? Regex, Like ?

И вообще правильно ли хранить так данные. Просто на ум больше ничего не приходит. Не создавать же таблицу с 250-ю полями.


PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Гость_Миша  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Цитата (balambasik @ 5.01.2017 - 15:22)
Далее нужно выбрать из таблиц...

Сколько таких таблиц?
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
FatCat  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Чеширский кот
******

Профиль
Журнал
Группа: Администратор
Почтальон группы
Сообщений: 6045
Пользователь №: 1
На форуме: 11 лет, 5 месяцев, 18 дней
Карма: 129

Не пью :
22 года, 10 месяцев, 19 дней


Цитата (balambasik @ 5.01.2017 - 14:22)
Не создавать же таблицу с 250-ю полями.

Почему не создавать? Если в таблице будут сотни тысяч строк, поиск Like будет занимать слишком много времени, а селектировать даже по 250 полям будет весьма быстро, если поля проиндексированные.


--------------------
Бесплатному сыру в дырки не заглядывают...
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
balambasik  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 43
Пользователь №: 39255
На форуме: 3 года, 3 месяца, 28 дней
Карма: 1




Опечатался. Таблица одна. И строк в ней не очень много будет. Максимум 500
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Гость_Миша  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Какое количество стран?
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Гость_Миша  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Прошу прощения, первый раз не увидел.

Если всего около 250 стран, то нужно сделать отдельную таблицу, как посоветовал FatCat.
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
kaww  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1788
Пользователь №: 20757
На форуме: 7 лет, 5 месяцев, 23 дня
Карма: 187




Цитата (balambasik @ 5.01.2017 - 15:22)
Есть поле Geo. В нем через запятую записаны коды стран RU, UA, US, BY и так далее.

В корне неверный подход. Проблему уже сам видишь
Цитата (balambasik @ 5.01.2017 - 15:22)
Regex, Like ?

По этому вбиваешь в гугле "sql нормальная форма" и в итоге на выходе получаешь:
Либо 3 таблицы и связ многие ко многим:
1. tems - эта та, что у тебя уже есть, в которой было поле со списком стран через запятую
2. countries - таблица стран
3. item_countries - таблица связей item_id, country_id
Выборка запросом вида:
select items.*
from countries
inner join item_countries on countries.id=item_countries.country_id
inner join items on item_countries.item_id=item.id
where countries.code = 'RU'

Либо 2 таблицы и связь один ко многим (что не совсем нормальная форма, но может быть оправдано в некоторых случаях):
1. items
2. item_countries
Выборка запросом вида:
select items.*
from item_countries
inner join items on item_countries.item_id=items.id
where item_countries.code = 'RU'
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
waldicom  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 6277
Пользователь №: 5552
На форуме: 9 лет, 19 дней
Карма: 164




Цитата (kaww @ 5.01.2017 - 13:21)
По этому вбиваешь в гугле "sql нормальная форма" и в итоге на выходе получаешь:

все так, но иногда, когда все плохо (или наоборот хорошо), можно и flat table использовать. Денормализации не надо бояться. Хотя такое решение, конечно же, должно быть обдумано и понято.


--------------------
Свои мозги еще никто не отменял.
Телепатов нету.
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
balambasik  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 43
Пользователь №: 39255
На форуме: 3 года, 3 месяца, 28 дней
Карма: 1




Да. Со связями у меня туго. Про нормализацию понятно. В ячейке должно храниться только что то одно. Без перечислений, как у меня, через запятую.


Вот гляньте структуру моей таблицы. Каждая строка это рекламная кампания со своими настройками. Геотаргетинг, таргет по ОС, по браузерам и т.д.

user posted image

Мне непонятно... мне вообще ничего не понятно. Куда мне при создании кампании записывать коды стран, браузеры, ОСи. ?

PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
kaww  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1788
Пользователь №: 20757
На форуме: 7 лет, 5 месяцев, 23 дня
Карма: 187




Цитата (balambasik @ 5.01.2017 - 22:01)
Мне непонятно...

Заведи справочники (таблицы) для Геотаргетинг, таргет по ОС, по браузерам и т.д. И таблицы связей для справочников и кампаний, в которых и будешь "записывать коды стран, браузеры, ОСи." а точнее их идентификаторы. См. первый вариант в моем посте выше. Такая структура позволит использовать индексы для выборки. Твой же вариант - это полный просмотр таблицы, что не есть хорошо.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 15395
Пользователь №: 4190
На форуме: 9 лет, 5 месяцев, 20 дней
Карма: 470




balambasik, то, что ты хочешь, можно реализовать в PostgreSQL. Там есть разные типы данных, в данном случае подойдет "массив". Посмотри тему http://phpforum.su/index.php?showtopic=83968, там есть ссылки в самом начале.
Но если тебе дОрог именно Мускуль, то да, используй нормализацию.


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса