Jeremy Peterson wrote:
> Could you repost your original message (I deleted it already, sorry.) and
> more details about your database tables even some sample data. I'll try to
> make more sense of the query you are performing and help you along.
>
> In general it would be better to eliminate the joins. But there are other
> reasons to use the joins as you are doing, it just depends. Sometimes
> doing your distinct first then processing that data in an array will be
> faster. That is as long as you don't have a million records it needs to
> process.
>
> I'll see what I can do,
To put it short, this just takes to long
to process. I need to make it faster. Relevant
fragment below. What I want is a sum of all
"new", instantiated (visible) articles in all non
hidden sections, where "new" is defined as
"today, from 00:00:01 to 23:59:59". As you can
see I count in departments "2" and "5", because
other would give false results(the "3" department
shares a lot of articles with the "2" department
and if there is an article in the "3" department
it is always in "2" too). First I need to know
if the article is instantiated, so I JOIN with
x_instance. From the x_instance table I get also
the "state" of the article. Then I need to know the
department plus is the section I am querying visible at
all (some aren't), so I JOIN on x_section. Then
I add all the counts over all the sections and
pretty-print a sum. If you need some diagnostic
information, please tell me what you need (results
of EXPLAIN? SHOW?). IIRC, all the fields I JOIN on
are indexed (BTREE).
> <?
> $suma = 0;
> $pytanie = "SELECT COUNT(DISTINCT x_article.ID) AS CNT ";
> $pytanie .= "FROM x_article ";
> $pytanie .= "LEFT JOIN x_instance ";
> $pytanie .= "ON x_article.ID = x_instance.Article ";
> $pytanie .= "LEFT JOIN x_section ";
> $pytanie .= "ON x_instance.Section = x_section.ID ";
> $pytanie .= "WHERE (x_section.Status & 1) = 0 "; // not empty
> $pytanie .= "AND (x_section.Dept = 2 OR x_section.Dept = 5) "; // Drugs, NeuroGroove
> $pytanie .= "AND (x_instance.Status & 255) = 0 "; // not hidden, etc
> $pytanie .= "AND UNIX_TIMESTAMP(x_article.Date) BETWEEN " . mktime(0, 0, 1,
> date('m'), date('d'), date('Y')) . " AND UNIX_TIMESTAMP(NOW()) ";
> $pytanie .= "GROUP BY x_article.ID";
> $wynik = mysql_query($pytanie);
> while ($tmp = mysql_fetch_array($wynik))
> {
> $suma += $tmp['CNT'];
> }
> if ($suma)
> {
> // pretty-printing of the result
> $dzisdodano = str_pad((string)(int)$suma, 4, '0', STR_PAD_LEFT);
> }
> else $dzisdodano = '0000';
> ?>
>
> The table layout is as follows:
>
> mysql> DESC x_article;
> +-------------+------------------+------+-----+----------------------+----------------+
> | Field | Type | Null | Key | Default | Extra
> |
> +-------------+------------------+------+-----+----------------------+----------------+
> | ID | int(10) unsigned | | PRI | NULL |
> auto_increment |
> | Name | varchar(255) | YES | MUL | NULL |
> |
> | Description | varchar(255) | YES | | NULL |
> |
> | Keywords | varchar(255) | YES | | NULL |
> |
> | Content | mediumtext | | | |
> |
> | Date | datetime | | | 2001-01-01 00:00:00 |
> |
> | Author | varchar(100) | | | [EMAIL PROTECTED] | |
> | Feedback | varchar(100) | YES | | NULL |
> |
> | Size | int(32) | YES | | NULL |
> |
> | Words | int(32) | YES | | NULL |
> |
> | Images | int(32) | YES | | NULL |
> |
> +-------------+------------------+------+-----+----------------------+----------------+
>
> mysql> DESC x_instance;
> +----------+------------------+------+-----+---------+-------+
> | Field | Type | Null | Key | Default | Extra |
> +----------+------------------+------+-----+---------+-------+
> | Article | mediumint(9) | | MUL | 0 | |
> | Section | mediumint(9) | | MUL | 0 | |
> | Priority | tinyint(4) | | | 0 | |
> | Status | int(16) unsigned | | | 0 | |
> +----------+------------------+------+-----+---------+-------+
>
> mysql> DESC x_section;
> +----------+----------------------+------+-----+---------------+----------------+
> | Field | Type | Null | Key | Default | Extra |
> +----------+----------------------+------+-----+---------------+----------------+
> | ID | mediumint(9) | | PRI | NULL | auto_increment |
> | Name | varchar(100) | | MUL | | |
> | Parent | mediumint(9) | | MUL | 0 | |
> | Dept | smallint(6) | | MUL | 0 | |
> | Priority | tinyint(4) | | | 3 | |
> | Keywords | varchar(255) | YES | | NULL | |
> | Sorting | varchar(255) | | | Priority DESC | |
> | OrderBy | varchar(255) | YES | | NULL | |
> | SplitAt | smallint(5) unsigned | | | 25 | |
> | Status | int(16) unsigned | | | 0 | |
> +----------+----------------------+------+-----+---------------+----------------+
--
Seks, seksić, seksolatki... news:pl.soc.seks.moderowana
http://hyperreal.info { iWanToDie } WiNoNa ) (
http://szatanowskie-ladacznice.0-700.pl foReVeR( * )
Poznaj jej zwiewne kształty... http://www.opera.com 007
--
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php