الحصول على عدد من الحقول في قاعدة بيانات مع بيان SQL؟
سؤال
وكيف أحصل على عدد من الحقول / مقالات في قاعدة بيانات SQL باستخدام الإعلان؟
المحلول
وط ط ط كافة الحقول في كافة الجداول؟ على افتراض معايير (MSSQL، الخلية، بوستجرس) يمكنك إصدار استعلام على information_schema.columns
SELECT COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS
وأو مجمعة حسب الجدول:
SELECT TABLE_NAME, COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS
GROUP BY TABLE_NAME
إذا مخططات متعددة لها نفس اسم الجدول في نفس DB، يجب أن تشمل اسم مخطط فضلا (أي: dbo.Books، user.Books، company.Books الخ) وإلا سوف تحصل على نتائج خاطئة. لذا فإن أفضل الممارسات:
SELECT TABLE_SCHEMA, TABLE_NAME, COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS
GROUP BY TABLE_SCHEMA, TABLE_NAME
نصائح أخرى
وهذه محاولة، وهذا سوف تستبعد جهات النظر، ومغادرة مكان جملة ما إذا كنت تريد مشاهدة
select count(*) from information_schema.columns c
join information_schema.tables t on c.table_name = t.table_name
and t.table_type = 'BASE TABLE'
ويبدو أن هذا هو ما تحتاجه.
select CountOfFieldsInDatabase = count(*)
from information_schema.columns
وفقط لأي القراء الآخرين الذين غوغلينغ ...
وهناك العديد من الحلول غير SQL، التي قد تكون مفيدة للمستخدم .. وهنا 2 أن أستعمل.
مثال 1: وصول VBA:
'Microsoft Access VBA
Function Count_Fields(Table_Name As String) As Integer
Dim myFieldCount As Integer
Dim db As DOA.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset(Table_Name, dbOpenDynaset)
myFieldCount = rs.Fields.Count
'return the count
Count_Fields = myFieldCount
'tidy up
Set rs = Nothing
Set db = Nothing
End Function
مثال 2: PHP 5.1:
<?php
// PHP5 Implementation - uses MySQLi.
function countFields ($tableName) {
$db = new mysqli('myserver.me.com', 'user' ,'pass', 'databasename');
if(!$db) {
echo 'ERROR: Could not connect to the database.';
}
else {
$rs->$db->query("SELECT * FROM ".$tableName.");
$fieldCount = $rs->field_count;
}
return $fieldCount;
?>
ويرجى عذر أي خطأ مطبعي في ما سبق - نأمل هناك من يرى هذا مفيد
select count(column_name) from information_schema.columns
where table_name = **name of your table here **