SQL - выбрать столбец внутри другой таблицы, если не ноль

0

Я пытаюсь создать "рецепт" внутри игры. Игрок может владеть компанией и заниматься ремеслом.

В настоящее время я получаю рецепты для каждого типа компании, но я не знаю, как написать запрос таким образом, что я также могу получить имена и изображения элементов, если item_id не пуст.

Это работает:

SELECT a.recipe_id, 
        a.item1_id, 
        a.item1_uses,
        a.item2_id, 
        a.item2_uses, 
        a.item3_id, 
        a.item3_uses, 
        a.item4_id, 
        a.item4_uses, 
        a.item5_id, 
        a.item5_uses, 
        a.newitem_id, 
        a.newitem_uses, 
        a.craft_description, 
        a.craft_button
    FROM
        company_recipes AS a, 
        company_types AS b
    WHERE
        a.type_id = b.type_id 
    AND
        b.type_id = '".$type."'; 
    "

Рецепт может содержать, например, два элемента, необходимых для создания чего-то нового, но также может быть 5. Так что, если это всего лишь 2, я хочу только получить img, имя этих 2, а остальные можно пропустить.

У меня есть другая таблица store_items, которая содержит img и имя элемента. Я думал что-то вроде линий EL ELSE или CASE WHEN внутри запроса, но я не уверен, как это сделать.

Что-то вроде: SELECT c.img, c.name FROM store_items AS c IF a.item1_id не является NULL.

Я чувствую, что я близок к решению, но пропустил последний шаг.

  • 3
    Совет сегодняшнего дня: переключитесь на современный явный синтаксис JOIN ! Легче писать (без ошибок), легче читать и поддерживать, и легче конвертировать во внешнее соединение при необходимости.
  • 2
    Другой совет: выбирайте псевдонимы таблиц, которые имеют смысл, например cr вместо a для company_recipes.
Показать ещё 7 комментариев
Теги:
mysqli

2 ответа

0
Лучший ответ

Спасибо за советы @jarlh, я изменил код и пришел к такому результату. Если у вас есть еще несколько советов, чтобы сделать это лучше, я рад слушать. (Я все еще младший и думал сам по пробке и ошибкам, поэтому иногда у меня не было бы лучших решений... Вот почему советы очень ценятся).

SELECT cr.recipe_id, 
        cr.item1_id, 
        cr.item1_uses,
        si1.name,
        si1.img,
        cr.item2_id, 
        cr.item2_uses,
        si2.name,
        si2.img,
        cr.item3_id, 
        cr.item3_uses, 
        si3.name,
        si3.img,
        cr.item4_id, 
        cr.item4_uses,
        si4.name,
        si4.img, 
        cr.item5_id, 
        cr.item5_uses,
        si5.name,
        si5.img, 
        cr.newitem_id, 
        cr.newitem_uses,
        si_new.name,
        si_new.img,
        cr.craft_description, 
        cr.craft_button
    FROM
        company_recipes AS cr
        INNER JOIN company_types AS ct ON cr.type_id = ct.type_id
        LEFT JOIN store_items AS si1 ON cr.item1_id = si1.item_id
        LEFT JOIN store_items AS si2 ON cr.item2_id = si2.item_id
        LEFT JOIN store_items AS si3 ON cr.item3_id = si3.item_id
        LEFT JOIN store_items AS si4 ON cr.item4_id = si4.item_id
        LEFT JOIN store_items AS si5 ON cr.item5_id = si5.item_id
        LEFT JOIN store_items AS si_new ON cr.newitem_id = si_new.item_id
    WHERE
        ct.type_id = '".$type."';

Я в основном собираю все сейчас и обрабатываю NULL в php-коде.

0

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

Объявить @Value int set @Value = @User_input --- использует то, что когда-либо пользователь игры будет

SELECT  
    a.recipe_id,
    a.item1_id, 
    a.item1_uses,
    a.item2_id, 
    a.item2_uses, 
    a.item3_id, 
    a.item3_uses, 
    a.item4_id, 
    a.item4_uses, 
    a.item5_id, 
    a.item5_uses, 
    a.newitem_id, 
    a.newitem_uses, 
    a.craft_description, 
    a.craft_button
    --- you can insert more columns but i stopped here as i dont know what data you have in the other tables.
FROM
    company_recipes a  
    INNER JOIN company_types b ON a.type_id = b.type_id
    INNER JOIN store_items c ON c.type_id = b.type_id
WHERE 
    b.type_id = @Value; --- '".$type."'; 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню