#mysql
#mysql
Вопрос:
Я хочу, чтобы поле MySQL могло ссылаться на то же поле в другой строке и возвращать значение этого поля при загрузке в PHP.
Например, если строка with id = 1
имеет значение "bar"
в столбце foo
, строка with id = 3
должна иметь значение "[1]"
(или что-то подобное; 1 указывает на строку with id = 1
) в столбце foo
, и MySQL должен заменить это значение на "bar"
при возврате массива.
Я не говорю о UPDATE
запросе. Я пытаюсь создать запрос ВЫБОРА, который произведет соответствующую замену. Я хочу [1]
быть постоянным значением этой строки и отражать все foo
, что должно быть в указанной строке.
Комментарии:
1. Вам действительно нужно прочитать о реляционных базах данных, теории множеств и синтаксисе SQL. Ваш вопрос указывает на очень мало знаний о том, как работает реляционная база данных.
Ответ №1:
Вы могли бы попробовать что-то подобное, но, не зная больше, ваш пробег может отличаться.
Кроме того, просто используйте 1
, а не [1]
в качестве ссылочного значения
SELECT a.id, b.foo
FROM `foo_table` a
INNER JOIN `foo_table` b
ON CAST(a.foo AS UNSIGNED) = b.id
WHERE a.id = 3 -- or whatever
Обновить
Я был бы более склонен сделать дизайн вашей таблицы более конкретным. Например, попробуйте эту структуру
CREATE TABLE `foo_table` (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
foo VARCHAR(255),
parent_id INT NULL,
FOREIGN KEY (parent_id) REFERENCES `foo_table` (id)
ON DELETE CASCADE
) ENGINE=INNODB;
Тогда ваш запрос может быть
SELECT a.id, COALESCE(b.foo, a.foo) AS foo
FROM foo_table a
LEFT JOIN foo_table b
ON a.parent_id IS NOT NULL
AND a.parent_id = b.id;