WedX - журнал о программировании и компьютерных науках

Как выбрать неизвестное количество столбцов в mysql?

Учитывая таблицу и имена некоторых столбцов, у меня есть следующий запрос выбора информационной схемы.

SELECT `COLUMN_NAME`
                FROM `INFORMATION_SCHEMA`.`COLUMNS`
                    WHERE `TABLE_SCHEMA` = 'm_college'
                    AND `TABLE_NAME` = 'm_fee'
                    AND COLUMN_NAME NOT IN ('id', 'classid', 'semid')

Но этот выбор не дает мне значения строк для каждого неизвестного столбца, который я выбираю. Все, что у меня есть, это имена неизвестных столбцов. Можно ли выбрать значения строк, чтобы я мог иметь столбец в качестве ключа и строки в качестве пары значений в моем php-скрипте? Мне нужно вставить имена столбцов и значения строк в другую таблицу. Пожалуйста, помогите или подскажите.


  • почему бы вам не использовать select * 19.08.2015
  • Потому что мне нужны динамические столбцы. 19.08.2015
  • INFORMATION_SCHEME содержит только метаданные, то есть данные о данных. Он используется MYSQL для записи и определения того, какие схемы/базы данных/таблицы/поля/типы полей/индексы и т. д. и т. д. существуют в этом экземпляре MYSQL Server. Он не содержит фактических данных, которые вы храните в своей базе данных. 19.08.2015
  • @RiggsFolly, спасибо за информацию. Итак, можете ли вы предложить какой-либо альтернативный способ извлечения неизвестных столбцов? 19.08.2015
  • Почему вы должны использовать определенные имена столбцов, что сбивает нас всех с толку? 19.08.2015
  • @RiggsFolly У меня есть таблица с динамическим созданием столбцов, мне нужно, чтобы все столбцы и их значения строк вставлялись в один столбец в другой таблице. Пожалуйста, предложите. 19.08.2015
  • есть ли шанс, что ваша таблица сильно денормализована, например, создание столбцов на лету? Для ежедневных данных 19.08.2015
  • Я думаю, что у @Drew есть хорошая мысль. Это звучит как очень плохой дизайн базы данных. Я полагаю, уже поздно переделывать вашу базу данных? 19.08.2015
  • Это внутрисетевой проект. Пожалуйста, предложите лучший дизайн, который поддерживает создание динамического столбца. 19.08.2015
  • как насчет того, чтобы мы предложили лучший дизайн для базы данных. выложи свою схему. Нам не нравятся проблемы XY 19.08.2015
  • Подождите .. я опубликую это 19.08.2015
  • Взгляните на этот sqlfiddle.com/#!9/6ada44. 19.08.2015
  • так что же такое динамическая часть, добавляющая новые типы комиссий в конце на лету? Если это так, таблица пересечений является наиболее гибкой и рациональной по сравнению с запросом структуры с использованием подготовленных операторов. 19.08.2015
  • Это прозвучит глупо, но вы имеете в виду, что таблица динамически добавляется ROWS? 19.08.2015

Ответы:


1

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

Это позволяет вам иметь фиксированную структуру и добавлять типы комиссий на лету.

CREATE TABLE IF NOT EXISTS `mz_fee222` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `classid` int(11) NOT NULL,
  `semid` int(11) NOT NULL,
  `batch` year(4) NOT NULL,
  `session` int(11) NOT NULL
);

create table fee_type
(   fee_id int auto_increment primary key,
    description varchar(100)
);
insert fee_type (description) values ('exam'),('marksheet'),('admitcard'),('centre'),('practical'); -- etc as you go

create table mz_fee_intersect
(   -- here is where the fee amount is stored. Flexible.
    id int auto_increment primary key,
    mz_id int not null, -- this is the id from my_fee222 table
    fee_id int not null, -- this is the fee_id from fee_type table
    fee int not null, -- here is the actual fee, like 100 bucks
    -- FK's below (not shown):

    -- 
    unique key (mz_id,fee_id) -- forbids duplicates
);
19.08.2015

2

SELECT * FROM table_name выбирает все столбцы и их значения из table_name. То, что вы используете, выбирает все имена столбцов из таблицы схемы (которая не содержит информацию в вашем table_name).

Вы можете использовать SELECT * FROM table_name в PHP и просто использовать mysqli_fetch_assoc для получения ассоциативного массива, который в основном представляет собой массив key => value, где key — это имя столбца, а value — значение для этого столбца в данной строке в массиве.

Вытащенный каталог из документов PHP (https://php.net/manual/en/mysqli-result.fetch-assoc.php), потому что вам нужен пример:

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* check connection */
if ($mysqli->connect_errno) {
    printf("Connect failed: %s\n", $mysqli->connect_error);
    exit();
}

$query = "SELECT * FROM table_name";

if ($result = $mysqli->query($query)) {

    /* fetch associative array */
    while ($row = $result->fetch_assoc()) {
        printf ("%s (%s)\n", $row["Name"], $row["CountryCode"]);
    }

    /* free result set */
    $result->free();
}

/* close connection */
$mysqli->close();
?>
19.08.2015
  • Мне это нужно, потому что я хочу динамически вставлять имя столбца в качестве значения строки в другую таблицу. 19.08.2015
  • Вы можете использовать вышеприведенное в PHP и просто использовать mysqli_fetch_assoc для получения ассоциативного массива, который в основном представляет собой массив key => value, где key — это имя столбца, а value — значение для этого столбца в данной строке массива. 19.08.2015
  • В Интернете есть множество руководств, могу ли я предложить вам взглянуть на некоторые из них. Тогда всегда есть руководство, написанное на многих языках Радикальная идея, которую я реализую , но когда ничего не помогает!!!! 19.08.2015
  • SELECT * FROM WHERE COLUMN_NAME NOT IN ('id', 'semid').. это то, что мне нужно. Мне нужно пропустить определенный столбец со значением строки. Я уже пробовал ваш ответ, и он не работает, потому что мы должны указать имя столбца. Имя столбца неизвестно. Итак, $row['неизвестно'] 19.08.2015
  • Просто чтобы вы знали, array_keys($row) даст вам все имена столбцов в строке. 19.08.2015

  • 3

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

    Если вы запустите DESCRIBE tablename и соберете результаты, вы получите примерно такой набор результатов.

    Field       Type                Null    Key    Default  Extra
    
    id          int(10) unsigned    NO      PRI    NULL     auto_increment
    parent_id   int(11)             NO      MUL    0    
    lft         int(11)             NO      MUL    0    
    rgt         int(11)             NO             0    
    level       int(10) unsigned    NO             NULL 
    name        varchar(50)         NO      UNI    NULL 
    title       varchar(100)        NO             NULL 
    rules       varchar(5120)       NO             NULL 
    

    Если вы загрузите это в массив, а затем отбросите строки, которые вы не хотите выбирать в более позднем запросе, вы получите их имена столбцов (в столбце «Поле») и даже их типы данных, если они вам нужны.

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

    Надеюсь, это поможет.

    19.08.2015
    Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]