Сравнение значений в таблице MySQL на основе строк других таблиц - PullRequest
0 голосов
/ 17 октября 2011

Я работаю над прикладной системой в CakePHP. Каждая заявка содержит адрес и (только для Великобритании) почтовый индекс заявителя.

Клиент хочет иметь возможность назначать "области почтовых индексов" данному члену своей команды. К сожалению, область почтового индекса различается по формату и длине - примеры: TA, TQ1, S60, BS22, TA6 4EJ

Пользователь хочет иметь возможность указывать целые области или более конкретные области для каждого пользователя, если требуется. schema

Мне нужно иметь возможность взять каждый prefix и сравнить его с postcode для каждого приложения и вернуть любые совпадения.


Пользователь Ross управляет приложениями с почтовым индексом, начинающимся с: BQ. BS и S60

Пользователь Dave управляет приложениями с полными почтовыми индексами: BS22 4JL и TA6 7EJ


Я подумал, что лучше всего было бы иметь таблицу, полную пользовательских префиксов почтовых индексов:

   id  |  prefix
    1  |      TQ
    2  |      TL
    3  |     S50
    4  |     S55
    5  | TA6 4EJ

Каждому пользователю назначается область почтового индекса для управления.

Я думаю, что если я смогу сравнить каждый почтовый индекс приложения с каждым префиксом, я смогу получить все приложения в данной области почтового индекса, а затем найти пользователя, которому он принадлежит.

id | postcode
1  |  tq33 abc
2  |  TL5  8HA
3  |  s50 11l

К сожалению, данные почтового индекса не представлены ни в одном стандартном / обычном формате; так что это может быть сложно. Похоже, мне нужно JOIN prefix на почтовый индекс; но поскольку ключа нет, я не думаю, что это возможно.

Нет прямой связи между prefix и postcode. Чувствую, что я упускаю что-то фундаментальное

Есть указатели?

1 Ответ

1 голос
/ 17 октября 2011

попробуй:

SELECT users.name, app.* from applications app, users, postcodes where app.postcode LIKE CONCAT(postcodes.prefix,'%') AND postcodes.user_id = users.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...