В настоящее время у меня есть 2 таблицы, допустим, что Table_A содержит сотни бутербродов вместе с информацией о них и изображениями, а Table_B содержит конкретные сэндвич-группы. Например:
Таблица А будет иметь 4 столбца:
Table_B поможет классифицировать бутерброды:
Столбец 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.
Я постараюсь быть более конкретным и напишу процедуру, которую я хотел бы, чтобы код прошел:
Вот мой текущий код:
$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>';
}
Как я понимаю, для экономии ресурсов лучше всего сконцентрироваться в одном утверждении, однако я не могу определить правильный тип соединения.
Есть идеи, как этого добиться?
Пытаться 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
Других решений пока нет …