Нужна инструкция MySQL, которая проверяет ячейку

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

Таблица А будет иметь 4 столбца:

  • Столбец 1 «id», который автоматически увеличивается
  • Колонка 2 «sandwich_name», которая содержит сэндвич с фрикадельками 1, сэндвич с фрикадельками 2, сэндвич с фрикадельками 3, сэндвич с индейкой 1 и т. Д.
  • Колонка 3 «сэндвич-типа», в данном случае будет Meatball Sandwich, Meatball Sandwich, Meatball Sandwich, Турция Sandwich
  • Колонка 4 «sandwich_picture» колонка, которая содержит ссылку на картинку.

Table_B поможет классифицировать бутерброды:

  • Столбец 1, называемый «sandwich_category», который соответствует столбцу 3 из Table_A, содержит заголовки «Meatball Sandwich», «Turkey Sandwich»
  • Столбец 2 «featured_sandwich_id», где я могу выбрать идентификатор сэндвича из Table_A, который у меня есть оператор SELECT, который извлекает его избранное изображение:

    SELECT featured_sandwich_id FROM Table_B WHERE sandwich_category='Meatball Sandwich' AND featured_sandwich_id != 0
    

Затем у меня есть код if / while, который загружает изображение сэндвича.

Проблема, с которой я столкнулся, заключается в том, что в Table_A будет новый sandwich_type, который еще не имеет своей собственной строки sandwich_category в Table_B, и в этом случае я хочу, чтобы код автоматически извлекал изображение из последнего введенного сэндвича из таблицы Другими словами, в случае, если featured_sandwich_id еще не установлен в Table_B, я бы хотел, чтобы оператор select автоматически извлекал идентификатор и изображение самого последнего опубликованного сэндвича из Table_A.

Я постараюсь быть более конкретным и напишу процедуру, которую я хотел бы, чтобы код прошел:

  • 1 автоматически созданный div для каждого типа sandwich_category.
  • 2: Div включает имя sandwich_category в Table_B и проверяет, установлен ли featured_sandwich_id в Table_B.
  • 3: Если установлен featured_sandwich_id, вытяните изображение, связанное с сэндвич-идентификатором в Table_A.
  • 4: Если featured_sandwich_id НЕ был установлен (или если по какой-то причине сэндвич_категория еще не была подробно описана в Table_B), используйте имя сэндвича_категории и изображение самого последнего сэндвича из указанной сэндвич_категории и заполните их в div выше.

Вот мой текущий код:

    $QUERY = "(
SELECT Table_A.sandwich_picture, Table_A.sandwich_type, Table_B.featured_sandwich_id
FROM Table_A
LEFT JOIN Table_B
ON (Table_A.id = Table_B.featured_sandwich_id)
WHERE (Table_A.sandwich_type = 'Meatball Sandwich')
LIMIT 1)"

Вышеуказанное LEFT JOIN имеет изображение для ‘Meatball Sandwich’ и всех других sandwich_types, но оно никогда не является изображением для связанного featured_sandwich_id.

Переключение вышеуказанного оператора в ПРАВИЛЬНОЕ СОЕДИНЕНИЕ всегда имеет изображение для featured_sandwich_id для ‘Meatball Sandwich’ и любого другого sandwich_type, но в случае, если featured_sandwich_id не был установлен в таблице, он получает 0 результатов.

Вот остальная часть PHP в качестве примера:

    ... while($query_results){

echo '<div class="sandwich_category">
<img src="$query_results['sandwich_picture']">
<br>
<p class="sandwich_category_name">';
echo $query_results['sandwich_category']; // This is the category name
echo '</p>
</div>';

}

Как я понимаю, для экономии ресурсов лучше всего сконцентрироваться в одном утверждении, однако я не могу определить правильный тип соединения.

Есть идеи, как этого добиться?

2

Решение

Пытаться LEFT JOIN, ORDER BY а также DESC:

SELECT b.sandwich_category, b.featured_sandwich_id, a.id, a.sandwich_name, a.sandwich_type, a.sandwich_picture
FROM Table_B b
LEFT JOIN Table_A a ON b.sandwich_category = a.sandwich_type
WHERE b.sandwich_category = 'Meatball Sandwich'
AND b.featured_sandwich_id != 0 ORDER BY a.id DESC

Я просто хочу уточнить, что вы хотите связать эти две таблицы Table_A«s sandwich_type в Table_B«s sandwich_category, право? Но содержание Table_B«s sandwich_category в строке. Так что значит Table A«s sandwich_type такое строка?

Почему бы просто не связать их Table_B«s primary id? Это будет намного быстрее и надежнее.

ОБНОВИТЬ:

SELECT b.sandwich_category, b.featured_sandwich_id, a.id, a.sandwich_name, a.sandwich_type, a.sandwich_picture
FROM Table_B b
LEFT JOIN Table_A a ON b.featured_sandwich_id = a.id
AND b.sandwich_category = a.sandwich_type
WHERE b.sandwich_category = 'Meatball Sandwich' AND b.featured_sandwich_id != 0 ORDER BY a.id DESC
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]