Поэтому я пишу небольшой проект с MySQL. Общая идея состоит в том, чтобы иметь простой веб-сайт, который отображает текст в html-квадратах, где данные о них берутся из базы данных (отображаемый текст и цвет фона квадрата).
Мой код теперь выглядит следующим образом:
Таблица с квадратами:
CREATE TABLE 'display' (
'display_id' int(50) NOT NULL,
'showcased_text' varchar(50) NOT NULL,
'assigned_color' int(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Таблица с цветами:
CREATE TABLE 'kolory' (
'color_id' int(50) NOT NULL,
'color_name' varchar(50) NOT NULL,
'color_code' varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Существует также код, который устанавливает связь между этими двумя таблицами:
ALTER TABLE 'display'
ADD CONSTRAINT 'display_ibfk_1' FOREIGN KEY ('assigned_color') REFERENCES 'colors' ('color_id');
COMMIT;
И пока это работает хорошо... Но когда я пытаюсь "распечатать" таблицу в PHPMyAdmin, которая содержит только отображаемый текст из таблицы "display" и назначенного цветового кода, все цветовые коды возвращаются как NULL.
The code looks like that:
SELECT display.showcased_text, colors.color_code
FROM display
LEFT JOIN colors ON display.assigned_color = colors.color_code
Я тоже пытался работать с CAST, вот так:
SELECT display.showcased_text, colors.color_code
FROM display
LEFT JOIN colors ON cast(display.assigned_color as VARCHAR(50)) = colors.color_code
Но тогда MySQL возвращает синтаксическую ошибку... Что я делаю неправильно?
Вы пытаетесь присоединиться к полю color_code
в таблице colors
. Вместо этого он должен быть в поле color_id
в таблице colors
.
SELECT display.showcased_text, colors.color_code
FROM display
LEFT JOIN colors ON display.assigned_color = colors.color_id
В Query 1 вы использовали неправильное условие для присоединения
SELECT display.showcased_text, colors.color_code
FROM display
LEFT JOIN colors ON display.assigned_color = colors.color_id
в запросе 2, не понимаю, почему вы используете листинг в состоянии соединения
display.assigned_color = colors.color_code
должен бытьdisplay.assigned_color = colors.color_id
, так как ссылка на внешний ключ - отdisplay.assigned_color
доcolors.color_id