Спасибо за всю помощь, которую я получил здесь, и все же, здесь у меня есть дополнительный вопрос.
У меня есть 3 соответствующих таблицы в MySQL:
STRINGVALUES ID ItemID Key Value 1 1 Note My note book is electronica INTEGERVALUES ID ItemID Key Value 1 1 Color 2 2 1 Type 4 STRINGS ID Value 1 Stone 2 Red 3 Blue 4 Phone
Другие поля были удалены, чтобы показать только, что имеет значение. ItemID – это идентификатор для статьи. В этом случае я только ввел информацию для статьи 1 (ItemID = 1)
В таблице INTEGERVALUES используется Value
в качестве идентификатора для поиска значения в таблице STRINGS (следовательно, отдельная таблица с целыми числами). Таблица строк также поддерживает несколько языков, а StringValues - это данные, введенные пользователями.
SQL-запрос, который у меня есть, выглядит следующим образом:
SELECT i.*, ai.Key, ai.Value, (SELECT s.Value FROM Strings s WHERE ai.Value=s.StringID) sValue, (SELECT ats.Value FROM attributestrings ats WHERE ats.ItemID=i.ItemID) sValue FROM items i INNER JOIN AttributeIntegers ai ON i.ItemID=ai.ItemID WHERE i.ID = 1
Это дает мне соответствующий результат
ItemID Key Value sValue sValue 1 Color 2 Red My note book is electronica 1 Type 4 Phone My note book is electronica
Я хочу получить этот результат:
ItemID Key Value sValue 1 Color 2 Red 1 Type 4 Phone 1 Note Null My note book is electronica
Я пытаюсь читать в UNION, но я не знаю, правильно ли это ответ …
Благодарю.
SELECT * FROM ( SELECT itemid, key, iv.value, s.value AS svalue FROM integervalues iv JOIN strings s ON s.id = iv.value WHERE iv.itemid = 1 UNION ALL SELECT itemid, key, NULL, value FROM stringvalues sv WHERE sv.itemid = 1 ) vals JOIN items i ON i.id = vals.itemid
Попробуйте использовать LEFT JOIN:
SELECT i.*, ai.Key, ai.Value, (SELECT s.Value FROM Strings s WHERE ai.Value=s.StringID) sValue, (SELECT ats.Value FROM attributestrings ats WHERE ats.ItemID=i.ItemID) sValue FROM items i LEFT JOIN AttributeIntegers ai ON i.ItemID=ai.ItemID WHERE i.ID = 1
И для слияния двух полей в одно использование CONCAT:
SELECT CONCAT('My field1 data', ', ', 'My field2 data');
результаты:
"My field1 data, My field2 data"