2015-06-16 2 views
1

Не являясь SQL-wiz вообще, просматривая результаты здесь, я не смог найти правильное решение, хотя сама проблема довольно проста.Таблица поиска на основе связанного текстового поля со второй таблицы

две таблицы:

  • продукты
    • ID
    • название
  • строки
    • ID
    • language_en

Запись в products может выглядеть следующим образом:

id = 1 
title = 10 

Соответствующая запись в strings:

id = 10 
language_en = "myProduct" 

Где, как число в products.title содержит идентификатор соответствующей записи в strings ,

Я хочу найти products для определенного названия, но эти названия хранятся в strings (из-за многоязычных возможностей).

Это то, что я придумал:

SELECT p.* FROM products p JOIN strings s ON p.title LIKE s.language_en WHERE s.language_en LIKE "myProduct" 

К сожалению, это не дает каких-либо соответствующих результатов. Очевидно, что мне сложно понять концепцию, стоящую за соединением, но даже чтение некоторых статей по этой концепции не приводит меня туда. Это не мои туфли.

+0

Является ли название на самом деле «тест» ? – Mureinik

+0

Это просто разбивка фактической структуры и используемого запроса. Я тестировал правильные данные. Я просто обновил вопрос. – SquareCat

ответ

1

В вашем состоянии sql может быть неправильно, я думаю, я изменил этот sql.

select p.* FROM products p JOIN strings s ON p.title = s.id and s.language_en = "Product name" 

Вы можете выполнить и увидеть результат.

Спасибо.

+0

Привет, эти sql работают нормально или нет? –

+0

Боже, теперь я чувствую себя таким слепым. Ты прав. Я думаю, что так оно и есть. Позвольте мне проверить его правильно, я вернусь к этому через мгновение. – SquareCat

1

join не соответствует действительности - значит p.title подходит к s.language_en вместо s.id, которые вы описали, должны совпадать.

Также обратите внимание, что при использовании без шаблона, оператор like по существу эквивалентно =, и это может сделать легче читать код, если вы используете его напрямую:

SELECT p.* 
FROM products p 
JOIN strings s ON p.title = s.id 
WHERE s.language_en = 'myProduct' 
+0

Благодарим за указание. Что касается оператора 'LIKE' - я использую подстановочные знаки на самом деле, но оставил их в приведенном выше примере. – SquareCat

Смежные вопросы