### SQL

If you want a count, ask for a count.  Don't ask the server to send all the data for all the rows, just to have the client count the rows.  (A few hundred rows is a trivial amount of data for a database to handle, but still, you should follow good practices.)

<!-- language: lang-sql -->

    SELECT SUM(*) AS obj_count
        FROM (
            SELECT COUNT(article_active)
                FROM wcx_articles WHERE article_active = '0'
            UNION ALL
            SELECT COUNT(video_active)
                FROM wcx_videos WHERE video_active = '0'
            UNION ALL
            SELECT COUNT(app_active)
                FROM wcx_apps WHERE app_active = '0'
            UNION ALL
            SELECT COUNT(link_active)
                FROM wcx_links WHERE link_active = '0'
        ) AS wcs_objects;

## Schema

If in fact all four of your tables are union-compatible with each other, then you should strongly consider merging them into one table with a `wcx_type` attribute that declares what type of object that row represents.

Are your `…_active` columns really strings?  Those columns should be of the [`BOOLEAN`](http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html) (i.e., `TINYINT(1)`) type.  The query should be adjusted accordingly: use `…_active = 0` instead of `…_active = '0'`.

## PHP

You reused the `$query` parameter to store the result of the query.  Don't be stingy like that — it's confusing.  Use a new variable to store the result.

You have a leak: `mysqli_free_result( $query );` never gets called, because that statement is unreachable.

You are mixing the object-oriented and procedural styles of [tag:mysqli].  You should either use the object-oriented style consistently…

    public function num_rows($query) {
        if (!($result = $this->link->query($query))) {
            $this->log_db_errors($this->link->error, $result, 'Fatal');
            return $this->link->error;
        }
        $num_rows = $result->num_rows;
        $result->free();
        return $num_rows;
    }

or use the procedural style consistently…

    public function num_rows($query) {
        if (!($result = mysqli_query($this->link, $query))) {
            $this->log_db_errors(mysqli_error($this->link), $result, 'Fatal');
            return mysqli_error($this->link);
        }
        $num_rows = mysqli_num_rows($result);
        mysqli_free_result($result);
        return $num_rows;
    }