Выбрать все столбцы, которые начинаются с XXX, используя подстановочный знак? - PullRequest
21 голосов
/ 25 января 2011

У меня есть несколько столбцов в моих базах данных с похожими именами. Как выбрать те, которые основаны на слове, с которого они начинаются? Вот пример макета таблицы: enter image description here

Я попытался выбрать всю информацию для конкретной вещи (вид пищи в этом примере), используя

$Food = "Vegetable"; 
mysql_query("SELECT `" . $Food . " %` FROM `Foods`");

но, похоже, это не сработало.

Любая помощь будет оценена: -)

РЕДАКТИРОВАТЬ: Очевидно, это не было ясно из моего примера, но я уже знаю все первые слова столбца. Столбцы всегда одинаковы, и никакие «виды пищи» никогда не добавляются и не удаляются. Переменная PHP используется только для того, чтобы определить, какой из набора видов мне нужен.

Ответы [ 5 ]

17 голосов
/ 25 января 2011

Вы должны построить SQL динамически.В качестве отправной точки вы получите имена столбцов, которые вы ищете.

SELECT COLUMN_NAME
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE table_name = 'Foods'
        AND table_schema = 'YourDB'
        AND column_name LIKE 'Vegetable%'
7 голосов
/ 25 января 2011

Нет способа сделать именно то, что вы пытаетесь. Вы могли бы сначала выполнить другой запрос, чтобы получить все имена столбцов, затем обработать их в PHP и построить второй запрос, но это, вероятно, более сложно, чем просто записать нужные имена.

Или есть причина, по которой этот запрос должен быть динамическим? Будет ли структура стола часто меняться?

5 голосов
/ 12 апреля 2016

Вот способ, которым я сделал это исключительно с MySQL:

SET SESSION group_concat_max_len = 2048;
SELECT GROUP_CONCAT(CONCAT(" ",CAST(column_name as CHAR(50)))) FROM information_schema.columns WHERE table_name='real_big_table' AND column_name LIKE 'prefix%' INTO @sub;
SET @x = CONCAT("SELECT ",@sub," FROM my_db.real_big_table WHERE my_db.real_big_table.country_id='US'");
PREPARE stmt FROM @x;
EXECUTE stmt;

Мой ответ вдохновлен этим ответом .

Примечание: мой «внутренний DBA» (в виде маленького ангела на моем плече) говорит мне, что необходимость сделать это, вероятно, признак плохой структуры DB, но мой «внутренний хакер» в виде маленького дьявола на моем другом плече) говорит "просто сделай это!"

2 голосов
/ 18 апреля 2012

Преобразование вашей базы данных в одну с тремя столбцами:

Product_type (vegetable, fruit, etc) 

Name (apple, carrot, etc) 

color (orange, yellow, etc)

Теперь вы можете использовать подстановочный знак для получения только определенного типа, потому что теперь он находится в столбцах, а не в заголовке.

1 голос
/ 25 января 2011

Как насчет создания запроса в 2 этапа?

1- Получить имя столбца из схемы БД (или в другом месте)

2- Создайте SQL-запрос с именем столбца, которое соответствует условиям вашего фильтра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...