2017-02-12 2 views
1

В прошлый раз, когда вы, ребята, были очень полезны, будем надеяться, что мы также сможем решить следующую проблему, которую у меня есть.PHP/SQL Запрос, где таблицы соответствуют (подстановочный знак)

У меня есть 2 таблицы в одной базе данных и пытается совместить поля. Вот запрос, который я ищу с именем таблицы, но я не могу заставить его работать:

Я хочу, чтобы таблица «Проекты» таблицы «Столбец» и столбец «categorysecond» «users_profile» и столбец «категория».

projects.categorysecond может включать пример; «Roofing, Windows, Landscaping» и user_profile.category могут иметь только «КРОВАТИ» ИЛИ «Windows» ИЛИ «Ландшафтный дизайн», поэтому я хочу вывести результаты из «проектов», если результат из users_profile.category FITS в проектах.категории второй

*** Важно. У меня нет уникальных идентификаторов для внутреннего соединения на идентификаторе примера. Единственное совпадение должно быть в таблицах, перечисленных выше, если слова (% Wildcard) из одного соответствуют другому.

ОБРАЗЕЦ МОЕЙ ПОПЫТКИ

$sql = "SELECT DISTINCT users_profiles.username, projects.id FROM users_profiles, projects WHERE users_profiles.category like '%' + projects.categorysecond + '%'"; 

ли это смысл? :)

Заранее спасибо.

+1

Редактировать свой вопрос и предоставить образцы данных и желаемые результаты * в табличном формате * в вопросе. Во-вторых, хранение списков вещей в виде строки с разделителями-запятыми - действительно, действительно, действительно, действительно плохая идея. Вы должны объяснить, почему вы выбрали такой плохой способ для представления отношений категории. –

+0

Добавлен образец моей попытки выше. Спасибо. – SiREKT

ответ

1
select distinct 
     up.username 
     ,p.id 
from users_profiles as up 
     join projects as p 
     on  concat(',',p.categorysecond,',') like concat('%,',up.category,',%') 
+0

Дуду, ты гений ... это сработало. Огромное спасибо!!! – SiREKT

+0

:-) Добро пожаловать. Пожалуйста, не забудьте принять ответ –

+0

Здравствуйте @dudu! Небольшая проблема теперь, когда я сделал больше тестов. Когда у моего поля users.profiles (category) есть Roofing, а мои полевые проекты (categorysecond) имеют Roofing, он делает результаты HOWEVER, как только я вводим другую категорию и сохраняю ее после Roofing (например, Roofing; Painting;), он больше не находит Кровельные работы. Я принял предложение от Гордона Линоффа и перестроил все записи в категориях второй от слова1, word2, word3; к слову 1; слово2; слово3; Кроме того, я попробовал find_in_set(), как предложил Гордон Линофф, но не получил никаких результатов. Любые мысли? – SiREKT

0

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

Иногда мы придерживаемся очень плохих проектных решений других людей. MySQL имеет функцию find_in_set() с работами в этом случае:

SELECT DISTINCT up.username, p.id 
FROM users_profiles up JOIN 
    projects p 
    ON find_in_set(up.category, p.categorysecond) > 0; 

Примечание: Если вы не нужны DISTINCT, то не включайте его. Это просто наносит штраф за исполнение.

+0

Привет, Гордон, похоже, у меня все еще есть проблемы. Я взял некоторые из ваших отзывов, но вижу свой ответ сверху. – SiREKT

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