MySQL Присоединиться, используя "содержит"? - PullRequest
5 голосов
/ 09 февраля 2011

У меня есть две таблицы:

Table: ORDERS
ID - NAME    - DATA
---------------------------------------------
1  - Order 1 - node_checkout_nid";i:141;s:10:
2  - Order 2 - node_checkout_nid";i:142;s:10:

Table: NODES
NID - Description
--------------------
141 - bla bla bla
142 - bla bla bla 2

Мне нужен запрос на соединение SQL, который может объединить две таблицы по NID, учитывая, что NID находится в столбце «ДАННЫЕ».

Мне нужно закончить с этим:

Table: RESULT
ID - NAME    - DATA                             NID - Description
-----------------------------------------------------------------------------------
1  - Order 1 - node_checkout_nid";i:141;s:10: - 141 - bla bla bla
2  - Order 2 - node_checkout_nid";i:142;s:10: - 142 - bla bla bla 2

Я хотел использовать "подобное" объединение, но я думаю (если это возможно) "содержащее" объединение было бы лучше? Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

6 голосов
/ 09 февраля 2011

Вы можете использовать:

SELECT ID, NAME, DATA, NID, Description
  FROM ORDERS INNER JOIN NODES ON DATA LIKE CONCAT('%;i:', NID, ';%')

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

2 голосов
/ 09 февраля 2011

Ваши данные денормализованы. Вы храните какой-то сериализованный объект в столбце DATA и пытаетесь выполнить реляционные операции на его основе. Хотя это возможно, имейте в виду, что это будет медленно и потенциально ненадежно. Просто сохраните свой NID в отдельном столбце.

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