#mysql #select #inner-join
#mysql #выберите #внутреннее объединение
Вопрос:
Я хочу выбрать все поля нескольких таблиц и получить результат отдельно, но mysql возвращает все строки вместе:
SELECT prod_product.*
,pub_comment.*
FROM prod_product
INNER JOIN pub_comment ON (prod_product.id = pub_comment.itemId)
WHERE prod_product.id=7744
Есть ли какой-либо способ, которым я мог бы извлекать строки каждой таблицы отдельно?
Я пытаюсь @prod:=prod_product.*
, @comment:=pub_comment.*
но mysql не позволил мне сохранить более 1 строки.
Комментарии:
1. @user703617: не забудьте принять правильный ответ, если вы его найдете.
Ответ №1:
Выполнить два запроса:
select * from prod_product WHERE prod_product.id=7744
и
select * from pub_comment WHERE pub_comment.itemId=7744
Один запрос всегда возвращает отдельные строки, содержащие два поля таблицы.
В любом случае: в чем проблема с объединением столбцов в одну строку? Если у вас возникли проблемы с их именами, вы можете использовать псевдонимы.
Комментарии:
1. Привет, Марко, спасибо за твой ответ, но это 2 запроса, и мне нужно уменьшить мои выборки из БД, возможно, мне придется это сделать
2. @user703617: Как я уже говорил, почему вы не можете использовать один запрос? В чем проблема наличия столбцов вместе?
3. @user703617: если вы дадите нам некоторые подробности, мы сможем помочь вам лучше 🙂
Ответ №2:
SELECT @prod:= CONCAT_WS(',',prod_product.field1,prod_product.field2,...)
,@comment:= CONCAT_WS(' ',pub_comment.field1,pub_comment.field2,....)
FROM prod_product
INNER JOIN pub_comment ON (prod_product.id = pub_comment.itemId)
WHERE prod_product.id = 7744
Обратите внимание, что CONCAT_WS разделит ваши поля, а CONCAT просто соберет их вместе.
Комментарии:
1. О, я должен предупредить вас о concat_ws, это выдало мне неприятную ошибку сортировки, когда таблица была в LATIN1, а система настроена на UTF8, тогда результат будет в UTF8, который не будет вставлен в таблицу LATIN1. Если вы получите этот обходной путь, используйте CONCAT(field1,’ ‘,field2,’ ‘…).