Нужна помощь в создании запроса MySQL SELECT - PullRequest
0 голосов
/ 29 января 2012

Итак, у меня есть таблица с колонками:

deck_id, card_name, quantity, board(irrelevent for this question)

В каждой строке есть идентификатор колоды, который мне нужен, название карты и количество вышеупомянутых карт.

Это будетвыглядит примерно так:

101, "cardofblahblah", 3, "main"
101, "differentcard", 2, "main"
102, "cardofblahblah", 1, "main"
102, "fictionalcard", 3, "main"
102, "madeupcard", 4, "main"
103, "magicalcard", 2, "main"
103, "trickcard", 3, "main"
...
...

Так выглядит моя база данных.Мне нужен запрос на выбор, который будет возвращать идентификатор колоды, которая содержит все карты, которые я указал, например: мне нужна колода, которая содержит 1 копию "madeupcard" и 3 копии "cardofblahblah".Это то, что мне действительно нужно сделать, но было бы здорово, если бы кто-то также упомянул, как я могу сделать> или <вместо того, чтобы просто устанавливать сумму. </p>

Я знаю, как выполнять запросы, но писать сложныеодна такая, что поставила меня в тупик.

Спасибо за любую помощь, которую вы, ребята, можете предложить. '

РЕДАКТИРОВАТЬ: Просто чтобы уточнить, я ищу колоды идентификаторов колод, которые содержат все карты, которые яуточнить.Например, «какие колоды содержат 3 копии карты и 1 копию готовой карты?»

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

РЕДАКТИРОВАТЬ2: Я разобрался с решением после прохождения различных других тем на SO.Однако у меня может быть не самый эффективный запрос, поэтому, если кто-то его улучшит, это было бы здорово.

SELECT table1.deck_id, table2.deck_id FROM decklist AS table1 
    JOIN (SELECT * FROM decklist WHERE card_name = "cardofblahblah" AND quantity = 3) 
    AS table2 ON table1.deck_id = table2.deck_id 
    WHERE table1.card_name = "madeupcard" AND quantity = 1;"

EDIT3: Спасибо Telarian.Он дал мне лучший запрос.

SELECT  t.deck_id
FROM    decklist t
INNER JOIN  decklist l
    ON  l.deck_id = t.deck_id
WHERE   (t.card_name = "madeupcard" AND t.quantity >= 1)
        AND
        (l.card_name = "cardofblahblah" AND l.quantity >= 3)

Ответы [ 2 ]

2 голосов
/ 29 января 2012

Кажется, что это слишком сложно ...

Не даст ли следующий запрос то, что вы хотите?

SELECT  t.deck_id
FROM    decklist t
    INNER JOIN  decklist l
        ON  l.deck_id = t.deck_id
WHERE   (t.card_name = "madeupcard" AND t.quantity >= 1)
        AND
        (l.card_name = "cardofblahblah" AND l.quantity >= 3)
0 голосов
/ 29 января 2012

Попробуйте код ниже

SELECT *
FROM myTable
WHERE ((board='madeupcard' AND quantity=1) OR (board='cardofblahblah' AND quantity=3))

Дайте мне знать, если вы этого хотите ...

...