У меня есть таблица с одной записью. Я должен получить те значения столбца, значения которых не равны нулю. Пожалуйста, предложите мне запрос для MySQL, чтобы я мог реализовать это. Мой стол:
В этой таблице 3 столбца имеют значения Null. Поэтому мне не нужны эти столбцы, запрос должен возвращать значения, которые не равны нулю.
Могу ли я получить имя столбца? Например, я хочу получить имя столбца, т.е. min_p5 , значение которого не равно null. Поэтому я могу разбить имя столбца на строки и использовать 5 в моих расчетах. Пожалуйста, предложите мне ответить.
Я думаю, что это то, что вам нужно:
Предполагая, что ваше имя таблицы является «заказом» [pls меняют его соответственно]
$q="show columns from orders"; $res=mysql_query($q) or die(mysql_error()); $arr_field=array(); while($row=mysql_fetch_object($res)){ $field=$row->Field; $q1="select ".$field." from orders where ".$field."!=0"; //if string then '0' $res1=mysql_query($q1) or die(mysql_error()); if(mysql_num_rows($res1)>0){ $arr_field[]=$field; } } $q="select "; foreach($arr_field as $field){ $q.=$field.","; } $q=rtrim($q,","); $q.=" from orders"; $res=mysql_query($q) or die(mysql_error()); while($row=mysql_fetch_object($res)){ foreach($arr_field as $field){ print($field."==".$row->$field."<br/>"); } }
в$q="show columns from orders"; $res=mysql_query($q) or die(mysql_error()); $arr_field=array(); while($row=mysql_fetch_object($res)){ $field=$row->Field; $q1="select ".$field." from orders where ".$field."!=0"; //if string then '0' $res1=mysql_query($q1) or die(mysql_error()); if(mysql_num_rows($res1)>0){ $arr_field[]=$field; } } $q="select "; foreach($arr_field as $field){ $q.=$field.","; } $q=rtrim($q,","); $q.=" from orders"; $res=mysql_query($q) or die(mysql_error()); while($row=mysql_fetch_object($res)){ foreach($arr_field as $field){ print($field."==".$row->$field."<br/>"); } }
в$q="show columns from orders"; $res=mysql_query($q) or die(mysql_error()); $arr_field=array(); while($row=mysql_fetch_object($res)){ $field=$row->Field; $q1="select ".$field." from orders where ".$field."!=0"; //if string then '0' $res1=mysql_query($q1) or die(mysql_error()); if(mysql_num_rows($res1)>0){ $arr_field[]=$field; } } $q="select "; foreach($arr_field as $field){ $q.=$field.","; } $q=rtrim($q,","); $q.=" from orders"; $res=mysql_query($q) or die(mysql_error()); while($row=mysql_fetch_object($res)){ foreach($arr_field as $field){ print($field."==".$row->$field."<br/>"); } }
Запустите это, и я надеюсь, вы получите представление …
SELECT * FROM table WHERE YourColumn IS NOT NULL;
Источник: MySQL SELECT только не нулевые значения
select * from table where column_name is not null
Попробуйте выполнить следующий запрос для решения вашей проблемы,
select * from table where column_name IS NOT NULL
Кажется, вы хотите вернуться:
| POINT_ID | BUS_ID | MIN_P5 | MIN_P15 | |----------|--------|--------|---------| | P101 | B101 | 1000 | 3000 |
потому что вы хотите исключить столбцы с нулевым значением. Это не так просто сделать в MySQL, потому что вам нужно использовать подготовленные инструкции:
SELECT CONCAT( 'SELECT CONCAT(\'SELECT \', CONCAT_WS(\',\',', GROUP_CONCAT( CONCAT( 'CASE WHEN EXISTS(SELECT * FROM TABLENAME WHERE ', `column_name`, '!=\'0\') THEN \'', `column_name`, '\' END') ), '),\' FROM tablename\') FROM tablename INTO @final_sql' ) FROM `information_schema`.`columns` WHERE `table_schema`=DATABASE() AND `table_name`='tablename' INTO @sql; PREPARE stmt FROM @sql; EXECUTE stmt; PREPARE finalstmt FROM @final_sql; EXECUTE finalstmt;
Пожалуйста, смотрите здесь . Если ваши столбцы являются номерами, а не строками, возможно, необходимы некоторые незначительные исправления. Однако я бы предложил вам попробовать другой подход или переосмыслить структуру таблицы.