#php #mysql
#php #mysql
Вопрос:
На днях мой запрос был настроен следующим образом
$query = "SELECT card_id,title,description,meta_description,seo_keywords,price
FROM cards,card_cheapest order by card_id";
Как вы можете видеть, я выбирал card_id,title,description,meta_description,seo_keywords
из таблицы cards
, и цена была взята из cheapest_card
. Они оба имеют card_id
общее (в обеих таблицах). Однако я столкнулся с небольшой проблемой. Когда я запускаю запрос в navicat lite, я получаю сообщение об ошибке "card_id is ambiguous"
. Я делал что-то не так?
Комментарии:
1. вы хотели объединить таблицы?
2. Ошибка говорит, что у 2 таблиц одинаковое имя столбца, DB не определяет, какой из них выбрать, поэтому вам нужно указать псевдоним для каждой таблицы в имени и использовать этот псевдоним для ссылки на конкретный столбец для его извлечения.
Ответ №1:
Когда в 2 или более таблицах есть столбец с одинаковым именем, вы должны указать таблицу, из которой вы хотите, чтобы этот столбец был.
т.е.:
$query = "SELECT cards.card_id,title,description,meta_description,seo_keywords,price
FROM cards,card_cheapest order by card_id";
Кроме того, вы действительно хотите выполнить запрос таким образом, без предложения WHERE / JOIN, чтобы определить, как ОБЪЕДИНИТЬ две таблицы?
$query = "SELECT cards.card_id,title,description,meta_description,seo_keywords,price
FROM cards,card_cheapest WHERE cards.card_id = card_cheapest.card_id
ORDER BY card_id";
Ответ №2:
Если у вас одинаковое имя столбца в двух таблицах, из которых вы выбираете, вам нужно добавить к части в SELECT
одно из имен таблицы (не имеет значения, какое, если это одни и те же данные)
например SELECT cards.card_id, ...
РЕДАКТИРОВАТЬ: Однако ответ cularis гораздо более понятен, чем мой, и обратите внимание на объединение двух столбцов card_id, если вы хотите получить правильные результаты.
Ответ №3:
Когда вы запускаете запросы, которые получают информацию из нескольких таблиц с общими именами полей, вам нужно указать, из какой таблицы вы хотите извлечь какое поле. Вы делаете это, указывая имя таблицы перед именем поля.
В вашем случае у вас есть два варианта:
cards.card_id или card_cheapest.card_id.
Также я согласен с @cularis, вам, вероятно, лучше выполнить объединение, но все же вам нужно будет указать, какой card_id вы хотите выбрать: тот, что из cards или card_cheapest.
Комментарии:
1. Спасибо всем. Я все еще не совсем понимаю JOIN, поэтому я его не использовал. Но я ценю помощь!