Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Select DISTINCT from multiple columns of multiple tables with PHP and MySQL

Using PHP and MySQL I'm trying to get all the distinct values out the number and type columns from all 4 of the tables listed below:

table_1

ID|t1_number|t1_type
1|1|new
2|1|old
3|2|new
4|3|new
5|1|old

table_2

ID|t2_number|t2_type
1|1|future
2|1|new
3|3|past
4|3|new
5|1|new

table_3

ID|t3_number|t3_type
1|1|past
2|1|new
3|1|new
4|1|new
5|1|old

table_4

ID|t4_number|t4_type
1|1|new
2|4|new
3|3|old
4|2|new
5|1|new

The values I want from the above tables would be:

numbers: 1,2,3,4

types: new,old,future,past

Here is what I have so far; but I'm not sure if the SQL is correct or how to format the while loop to get the values out.

$sql = "SELECT DISTINCT table_1.t1_number, table_2.t2_number, table_3.t3_number, table_4.t4_number, table_1.t1_type, table_2.t2_type, table_3.t3_type, table_4.t4_type
FROM table_1 
JOIN table_2
JOIN table_3
JOIN table_4";

$result = @mysql_query($sql, $con) or die(mysql_error());

while($row = mysql_fetch_array($result)) {

    $numbers= $row[?????????];

}
like image 935
Marcus Avatar asked Sep 30 '10 00:09

Marcus


1 Answers

Doing this in a single query risks duplicating a value in the output for either the number or type column, in the case that one list has more values than the other. To get a distinct list of values for either column, this needs to be separate queries:

Number

SELECT t1_number AS num
  FROM TABLE_1
UNION
SELECT t2_number
  FROM TABLE_2
UNION
SELECT t3_number
  FROM TABLE_3
UNION
SELECT t4_number
  FROM TABLE_4

Type

SELECT t1_type AS type
  FROM TABLE_1
UNION
SELECT t2_type
  FROM TABLE_2
UNION
SELECT t3_type
  FROM TABLE_3
UNION
SELECT t4_type
  FROM TABLE_4

There's no value to running DISTINCT in this UNION query, because duplicates will be removed, and this deals with only one column.

like image 125
OMG Ponies Avatar answered Sep 21 '22 09:09

OMG Ponies