Объединение таблиц с другим префиксом значения - PullRequest
0 голосов
/ 26 августа 2018

Я пытаюсь join две таблицы, но проблема в том, что во второй таблице значение, такое же, как в первой таблице, имеет префикс (эти таблицы создаются после opencart установка - демонстрационные данные):

Table 1: category
 -----------------------------
| category_id | category_name |
|-----------------------------|
|     1       |  Components   |
|     2       |    Laptops    |


Table 2: seo_url
 ------------------------------------------
| seo_url_id  |    query      |   keyword  |
|------------------------------------------|
|     35      | category_id=1 | components |
|     78      | category_id=2 | laptops    |

Таким образом, идентификатор категории находится в столбце category_id в Таблице 1 , и это число, но в Таблице 2 он находится в столбце query и имеет префикс category_id=, а затем идентификатор x (в случае ноутбуков категории x = 2).

Может кто-нибудь помочь мне понять, как я могу присоединиться к этим столам в этой ситуации?

Пока я пытался добавить category_id= + так:

SELECT a.id, a.category_name, b.query 
FROM category AS a
INNER JOIN seo_url AS b
ON a.category_id = 'category_id=' + b.query

П.С. Я пробовал ON 'category_id=' + a.category_id

P.S.S Есть также product_id, поэтому я не знаю, смогу ли я использовать LIKE, но я думал об этом, искал его и не мог найти способ заставить его работать.

Спасибо! D:

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

В MySQL используйте функцию CONCAT(...), которая может добавлять строки и числа, и она совместима с различными версиями этой базы данных.

Ваш фиксированный запрос будет:

SELECT a.id, a.category_name, b.query 
FROM category AS a
INNER JOIN seo_url AS b
ON CONCAT('category_id=', a.category_id) = b.query;

Ваша таблица seo_url уже содержит 'category_id =' в значениях поля query, поэтому вам не нужно добавлять его.

Кроме того, я бы рекомендовал называть псевдонимы таблиц более представительными именами вместо использования a и b.

Надеюсь, это поможет вам решить вашу проблему!

0 голосов
/ 26 августа 2018

Используйте вложенные функции REVERSE с + 0 для автоматической трансляции "разбора" целого числа.

Запрос

SELECT
 REVERSE(REVERSE('category_id=2') + 0)
UNION ALL 
SELECT 
 REVERSE(REVERSE('category_id=21') + 0)

Результат

| REVERSE(REVERSE('category_id=2') + 0) |
|---------------------------------------|
|                                     2 |
|                                    21 |

см. Демонстрацию http://sqlfiddle.com/#!9/340e01/530

Используйте его в своем запросе.

Запрос

SELECT a.category_id, a.category_name, b.query 
FROM category AS a
INNER JOIN seo_url AS b
ON a.category_id = REVERSE(REVERSE(b.query) + 0)

Результат

| category_id | category_name |         query |
|-------------|---------------|---------------|
|           1 |    Components | category_id=1 |
|           2 |       Laptops | category_id=2 |

см. Демонстрацию http://sqlfiddle.com/#!9/ef5781/1

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