content_image/871155.jpg content_image/871156.jpg
You can also solve the problem efficiently by using a UNION  that combines the output of two separate SELECT  statements. See Section 13.2.10.3, “UNION Clause” . 

## 3.6.8 Calculating Visits Per Day 

Each SELECT  searches only one key and can be optimized: 

SELECT field1_index, field2_index FROM test_table WHERE field1_index = ’1’ UNION SELECT field1_index, field2_index FROM test_table WHERE field2_index = ’1’; 

The following example shows how you can use the bit group functions to calculate the number of days per month a user has visited a Web page. 

CREATE TABLE t1 (year YEAR, month INT UNSIGNED, day INT UNSIGNED); INSERT INTO t1 VALUES(2000,1,1),(2000,1,20),(2000,1,30),(2000,2,2), (2000,2,23),(2000,2,23); 

The example table contains year-month-day values representing visits by users to the page. To determine how many different days in each month these visits occur, use this query: 

SELECT year,month,BIT_COUNT(BIT_OR(1<<day)) AS days FROM t1 GROUP BY year,month; 

Which returns: 

<img src='content_image/871155.jpg'>

The query calculates how many different days appear in the table for each year/month combination, with automatic removal of duplicate entries. 

## 3.6.9 Using AUTO_INCREMENT 

The AUTO_INCREMENT  attribute can be used to generate a unique identity for new rows: 

CREATE TABLE animals ( id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (id) ); INSERT INTO animals (name) VALUES (’dog’),(’cat’),(’penguin’), (’lax’),(’whale’),(’ostrich’); SELECT * FROM animals; 

Which returns: 

<img src='content_image/871156.jpg'>

