X-Git-Url: https://delta.frontaccounting.com/gitweb/?a=blobdiff_plain;f=includes%2Fdb%2Fsql_functions.inc;h=56392e6d9fdb7eef8c2edbd838cb7517ab2d512e;hb=a001646bef2b971535791d4e67b8565684d6de24;hp=3b4b5acd499511998fd0ef9ba80c8d6a10d355d7;hpb=89e8ca2be9235215ac2e2bf5e58d7eedd2dda84d;p=fa-stable.git diff --git a/includes/db/sql_functions.inc b/includes/db/sql_functions.inc index 3b4b5acd..56392e6d 100644 --- a/includes/db/sql_functions.inc +++ b/includes/db/sql_functions.inc @@ -101,3 +101,33 @@ function running_total_sql($table, $column, $index) (SELECT @total:=0) total_var"; } +/* + Return number of records in tables, where some foreign key $id is used. + $id - searched key value + $tables - array of table names (without prefix); when table name is used as a key, then + value is name of foreign key field. For numeric keys $stdkey field name is used. + $stdkey - standard name of foreign key. +*/ +function key_in_foreign_table($id, $tables, $stdkey) +{ + + if (!is_array($tables)) + $tables = array($tables); + + $sqls = array(); + foreach ($tables as $tbl => $key) { + if (is_numeric($tbl)) { + $tbl = $key; + $key = $stdkey; + } + $sqls[] = "(SELECT COUNT(*) as cnt FROM `".TB_PREF."$tbl` WHERE `$key`=".db_escape($id).")\n"; + } + + $sql = "SELECT sum(cnt) FROM (". implode(' UNION ', $sqls).") as counts"; + + $result = db_query($sql, "check relations for ".implode(',',$tables)." failed"); + $count = db_fetch($result); + + return $count[0]; +} +