2013-12-18 6 views
0

Во-первых, на данный момент я вынужден использовать MySQL, несмотря на то, что он устарел. Я очень хорошо понимаю этот факт. Надеюсь, вы, ребята, можете помочь мне с моим синтаксисом sql.MySQL множественный выбор с разными типами в одном запросе

Я пытаюсь получить доступ к нескольким столбцам из разных таблиц. Проблема в том, что для некоторых столбцов требуется другое предложение where, чем последний столбец, который мне нужен, и предложение where для последнего столбца требует информации от остальной части запроса, поэтому я не могу разбить его на несколько запросов, я пробовал.

Я не могу использовать union, потому что один оператор select выбирает четыре столбца, а другой выбирает один столбец.

Запрос:

(SELECT DISTINCT inventory.Quantity, itemtypes.Itemtypename, 
itemtypes.ItemtypeID, inventory.ItemID 
FROM inventory JOIN itemtypes ON inventory.ItemtypeID = itemtypes.ItemtypeID 
JOIN sets ON inventory.SetID = sets.SetID 
WHERE inventory.ItemtypeID = itemtypes.ItemtypeID 
AND itemtypes.Itemtypename = 'Set' 
AND sets.SetID = '".$setid."') 
UNION 
(SELECT DISTINCT sets.Setname 
FROM sets JOIN inventory ON sets.SetID = inventory.ItemID 
WHERE sets.SetID = inventory.ItemID) 

Это то, что я пытался использовать, но безуспешно. Я не могу найти какой-либо другой способ привязки к различным операторам выбора без использования нескольких запросов (из-за структуры моего файла PHP, невозможно сделать правильно). Остальная часть файла будет работать, если только эта проблема будет решена. Надеюсь, вы, ребята, можете мне помочь, пожалуйста, сообщите мне, если это возможно. Дайте мне знать, если вам нужно также увидеть мой PHP-код. $ setid получается из get в файле и содержит значение, существующее в базе данных.

+0

MySQL не устарел! Откуда у тебя это есть? Некоторые функции API были заменены новыми, вот и все. – fancyPants

+1

На вопрос: Образец данных и желаемый вывод гарантируют помощь. И вам не нужно повторять условие соединения в предложении where. И какие разные положения, о которых вы говорите, в любом случае? Ваш запрос может быть отлично написан в одном запросе, даже если не требуется соединение. Очень неясный вопрос ... – fancyPants

+0

@fancypants Я попытаюсь объяснить разницу с предложениями where where. Все это находится вокруг множества.SetID = '". $ Setid."' И устанавливает.SetID = inventory.ItemID. $ setid отличается от inventory.ItemID. $ setid - это в основном набор, содержащий еще несколько наборов, с теми же идентификаторами, что и inventory.ItemID. Если я использую Setname в верхнем предложении Select, я получаю имя набора из набора $ setid, чего я не хочу. Вот почему я пытаюсь получить все имена из наборов внутри того, где SetID = selected ItemIDs внутри $ setid. Я согласен, что это сбивает с толку. – user3069795

ответ

0

Может быть, вы можете попробовать вот так. Он отлично работает в SQL Server.

SELECT TMP1.Quantity,TMP1.Itemtypename, TMP1.ItemtypeID, TMP1.ItemID, TMP2.Setname 
FROM(
SELECT DISTINCT 
inventory.Quantity, 
itemtypes.Itemtypename, 
itemtypes.ItemtypeID, 
inventory.ItemID 
FROM inventory 
JOIN itemtypes ON inventory.ItemtypeID = itemtypes.ItemtypeID 
JOIN sets ON inventory.SetID = sets.SetID 
WHERE inventory.ItemtypeID = itemtypes.ItemtypeID 
AND itemtypes.Itemtypename = 'Set' 
AND sets.SetID = '".$setid."' 
) AS TMP1, 
(
SELECT DISTINCT 
sets.Setname 
FROM sets 
JOIN inventory ON sets.SetID = inventory.ItemID 
WHERE sets.SetID = inventory.ItemID 
) AS TMP2 

Надеюсь, это то, что вы хотите. Ваш вопрос кажется очень неоднозначным.

+0

Привет @Aditya и спасибо за ваш быстрый ответ! Это определенно шаг в правильном направлении. Однако мне нужно задать еще одну вещь. Во втором, где говорится, что WHERE устанавливает.SetID = inventory.ItemID, он принимает все идентификаторы ItemID из базы данных. Мне нужно, чтобы он взял только ItemID, выбранные из первого предложения select. Возможно ли это, что мне делать или мне нужны дополнительные запросы? – user3069795

+0

Зачем вам нужны отдельные запросы? просто добавьте ItemId в предложение first select, поскольку, как кажется, нет никакой разницы в фильтрации или сказать, где это условие. Было бы легче сделать так. – Aditya

+0

Было бы проще, если бы вы добавили скриншот вашего образца данных из обеих таблиц и желаемого результата. – Aditya

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