Подтвердить что ты не робот

Выбор всех столбцов, начинающихся с XXX с помощью шаблона?

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

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

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

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

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

EDIT: По-видимому, это не было ясно из моего примера, но я уже знаю все первые слова столбца. Столбцы всегда одни и те же, и никакие "пищевые виды" не добавляются и не удаляются. Переменная PHP существует только там, чтобы определить, какая из двух наборов типов мне нужна.

4b9b3361

Ответ 1

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

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

Ответ 2

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

SELECT COLUMN_NAME
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE table_name = 'Foods'
        AND table_schema = 'YourDB'
        AND column_name LIKE 'Vegetable%'

Ответ 3

Здесь я сделал это исключительно с 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" (в виде маленького ангела на моем плече) говорит мне, что это нужно, вероятно, является признаком плохой структуры БД, но мой "внутренний хакер" (в форме маленького дьявола на моем другом плече) говорит: "Просто сделай это!"

Ответ 4

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

Product_type (vegetable, fruit, etc) 

Name (apple, carrot, etc) 

color (orange, yellow, etc)

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

Ответ 5

Как создать запрос в 2 этапа?

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

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