Как определить правильный тип данных SQL для каждого элемента массива в PHP - PullRequest
0 голосов
/ 17 сентября 2011

Я написал PHP-класс, который получает заголовки из электронной таблицы .xls и создает таблицу с этими заголовками в качестве имен столбцов.

Он также получает каждую строку данных из электронной таблицы и помещает их вмассив.

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

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

Я не знаю, как это сделать, я думал, может быть, для каждого цикла и preg_match?

Любые идеиочень ценятся.

Ответы [ 2 ]

1 голос
/ 17 сентября 2011

Я думаю, что вам нужно проверить все данные в столбце, чтобы определить, есть ли какие-то нечисловые значения (http://ru.php.net/manual/en/function.is-numeric.php).Если нет нечисловых данных, вы можете использовать тип INT / TINYINT / MEDIUMINT с соответствующей длиной.Если есть не только числовые данные, вы можете использовать CHAR / VARCHAR / BLOG / TEXT с соответствующей длиной.

0 голосов
/ 17 сентября 2011

То, как я бы поступил, это определить, насколько точным я хотел быть. Например, если я найду столбец с 1 и 0, я определю его как двоичный файл или я должен определить его как целое число на случай, если в будущем появятся числа, отличные от 0 и 1.

Также вы собираетесь проанализировать все строки таблицы или только несколько строк в верхней части, прежде чем решить, какой тип данных использовать? В приведенном выше примере, вы можете иметь 0 и 1 в верхней части таблицы, но найти другие числа ближе к нижней части. Если вы решите просмотреть только верхние строки, вы можете быть менее строгими в отношении типа данных. Поэтому, если вы найдете только 0 и 1, вы можете определить поле как целое, а не двоичное. Это уменьшит вероятность ошибок при импорте данных.

Вы можете использовать логику примерно так:

for each row (and you can decide if you want to check all the rows or just a few)
if is_int() -> data field integer;
if is_float() -> data field is float;
if is_string()
    if it is a date & time -> data field is datetime;
    if it is a date without time -> data field is date;
    else -> data field is varchar.

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

...