Здравствуйте. Возникла проблема, надеюсь кто-нибудь сможет помочь. Уже устал мозги ломать. Допустим, есть таблица `My_Table` с полями `id`, `data1`, `data2` и т.д. Мне при выводе запроса нужно, чтобы производилась проверка типа поля и в зависимости от типа - преобразование данных. Например, если тип поля - tinyint(1) unsigned - то значение 0 в ячейках этого столбца интерпретировать как 'нет', 1 - как 'да'. Если тип какой-то другой - выводить без изменений. Конечно, такую проверку можно сделать уже после передачи результатов запроса в PHP. Но для меня желательно, чтобы преобразование делал именно MySQL. Возможно ли это? Команда SHOW выдает целую таблицу, а сделать вложенный запрос SELECT -> SHOW у меня не получилось. Что посоветуете?
hyperint Что-то наподобие: PHP: <?php function getTableFieldType($table, $field) { static $cache=array(); if(!isset($cache[$table])) { $cache[$table]=array(); $result=mysql_query("SHOW COLUMNS FROM $table"); while($row=mysql_fetch_assoc($result)) { $source=strtoupper($row["Type"]); if($source=="TINYINT(1)") $type="boolean"; else if(preg_match("{INT\b}",$source)) $type="integer"; else if(preg_match("{\b(FLOAT|DOUBLE|DECIMAL)\b}",$source)) $type="float"; else $type="text"; $cache[$table][$row["Field"]]=$type; } mysql_free_result($result); } return isset($cache[$table][$field])?$cache[$table][$field]:false; } Иначе боюсь никак...
Большое спасибо за приведенный пример. Значит, одним запросом вывод и преобразование никак не сделаешь... Ну что ж, бум думать.
[sql]CREATE TABLE type_convert ( type_id TINYINT, value CHAR(3) ); INSERT INTO type_convert VALUES(0, 'нет'); INSERT INTO type_convert VALUES(1, 'да');[/sql] и объедените с этой таблицей
Ti Не совсем понял... А что это даст. 1) Создаем таблицу со столбцами `type_id`, `value` 2) добавляем две записи (0, 'нет') и (1, 'да') 3) Объединяем (кстати, как? Т.е. в исходной таблице добавляется еще два поля и две записи... эээ... а дальше что? Можно поподробнее?
нет, таблица другая [sql]SELECT value FROM table LEFT JOIN type_convert ON table.row = type_convert.type_id WHERE ...[/sql]
AlexGousev Не совсем. Функции полезные (про них я не знал), но нужно не совсем то. Чтобы замена производилась до того, как результаты запроса передаются PHP. Т.е. в таблице идут значения: 183, 11, 'Пупупкин', 0, 1, 1, 0 а MySQL выдал: 183, 11, 'Пупупкин', 'нет', 1, 'да', 0 dark-demon На выводе вместо 0/1 мне нужно иметь "нет"/"да". Такая ситуация, что в разных таблицах эти самые поля `data1`, ... могут иметь разные типы. А производить анализ типа поля уже в PHP мне неудобно, потому как придется многое переделывать
[sql]SELECT (SELECT value FROM type_convert WHERE type_id = row1 LIMIT 1) AS row1, (SELECT value FROM type_convert WHERE type_id = row2 LIMIT 1) AS row2, (SELECT value FROM type_convert WHERE type_id = row3 LIMIT 1) AS row3 FROM table WHERE ...[/sql]
armadillo Имелось в виду не совсем это. Насколько я понимаю, в приведенном примере на да и нет будут заменены все 0 и 1 независимо от типа столбца. Зато варианты с enum и объединением таблиц прошли на ура. Всем спасибо за помощь.