2012-03-13 4 views
1

можно выбрать количество строк, возвращаемых запросом, когда я выбираю все, выполнив следующие действия:Как подсчитать количество столбцов в таблице MySQL с помощью C#?

SELECT Count(*) FROM `foo`.`bar`; 

Однако, теперь я хочу, чтобы выбрать, сколько столбцов возвращаются. Есть простой способ сделать это?

+1

Там в один. «Столбец», который содержит количество всех строк в таблице. –

+0

Вам действительно нужно это внутри mysql или только внутри вашего приложения? если последний, на каком языке он написан? – Sirko

+0

В моем приложении. Я пытаюсь написать функцию, которая принимает запрос MySql в качестве параметра и возвращает массив 2d, и, очевидно, количество столбцов и строк каждый раз различается на C#! – JMK

ответ

3

Используйте базу данных information_schema.

SELECT 
    COUNT(COLUMN_NAME) AS numcols 
FROM COLUMNS 
WHERE 
    TABLE_NAME = 'bar' 
    AND TABLE_SCHEMA = 'foo' 

Чтобы поместить их вместе, используйте:

SELECT 
    (SELECT COUNT(*) FROM foo.bar) AS numrows, 
    (SELECT 
     COUNT(COLUMN_NAME) AS numcols 
    FROM COLUMNS 
    WHERE 
     TABLE_NAME = 'bar' 
     AND TABLE_SCHEMA = 'foo' 
) AS numcols 
2

DESCRIBE someTable, а затем mysql_count_rows() на результат.

Поскольку вопрос связан с C#, я думаю, что это должно сработать, но я не сделал C# в течение длительного времени.

MySqlConnection connection = new MySqlConnection(#...); 
MySqlCommand command = connection.CreateCommand(); 
MySqlDataReader Reader; 
command.CommandText = "DESCRIBE sometable"; 
connection.Open(); 
Reader = command.ExecuteReader(); 
Reader.FieldCount # this has the count of rows, and hence columns 
+0

Вопросник использует C#, поэтому PHP 'mysql_count_rows()' ему не поможет. Вы ответили, прежде чем он разъяснил это в комментарии, хотя, я думаю ... – CanSpice

+0

Да, @burhan ответил, прежде чем я это разъяснил! Извиняюсь. – JMK

1

Если таблица mydb.mytable является MyISAM, следующие должны хорошо работать:

SELECT 
    row_count,column_count 
FROM 
    (
     SELECT table_rows row_count 
     FROM information_schema.tables 
     WHERE table_schema = 'mydb' 
     AND table_name = 'mytable' 
    ) rowcount, 
    (
     SELECT MAX(ordinal_position) column_count 
     FROM information_schema.columns 
     WHERE table_schema = 'mydb' 
     AND table_name = 'mytable' 
    ) columncount 
; 
+0

К сожалению, это InnoDB, но я не указал этого ранее. – JMK