MySQL/PHP只从多个列中选择唯一的值,并将它们放入单独的数组中

MySQL/PHP只从多个列中选择唯一的值,并将它们放入单独的数组中,php,mysql,arrays,Php,Mysql,Arrays,使用PHP和MySQL,我试图从表中的多个列(但不是表中的所有列)中选择唯一的值,并将所选每列的所有唯一值放入其自己的数组中。每列值的唯一性应仅与同一列中的其他值进行比较 下面的代码将$make_数组中所有列中的所有唯一值放入,然后将空值放入所有其余数组中 如何仅从这些列中选择唯一的值,并将每个列的值放入其自己的数组中 $sql = " (SELECT make FROM items) UNION (SELECT model FROM items) UNION

使用PHP和MySQL,我试图从表中的多个列(但不是表中的所有列)中选择唯一的值,并将所选每列的所有唯一值放入其自己的数组中。每列值的唯一性应仅与同一列中的其他值进行比较

下面的代码将$make_数组中所有列中的所有唯一值放入,然后将空值放入所有其余数组中

如何仅从这些列中选择唯一的值,并将每个列的值放入其自己的数组中

$sql = "
    (SELECT make FROM items)
    UNION
    (SELECT model FROM items)
    UNION
    (SELECT year FROM items)
    UNION
    (SELECT month FROM items)
    UNION
    (SELECT day FROM items)
    UNION
    (SELECT hour FROM items)";

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

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

    $make = $row[make];
    $model = $row[model];
    $year = $row[year];
    $month = $row[month];
    $day = $row[day];
    $hour = $row[hour];

    $make_array[make][] = $make;
    $model_array[model][] = $model;
    $year_array[year][] = $year;
    $month_array[month][] = $month;
    $day_array[day][] = $day;
    $hour_array[hour][] = $hour;
}

如果希望将其保留为一条SQL语句,则可以:

$sql = "
    SELECT DISTINCT 'make' as descr,make as val FROM items
    UNION
    SELECT DISTINCT 'model' as descr,model as val FROM items
    UNION
    SELECT DISTINCT 'year' as descr,year as val FROM items
    UNION
    SELECT DISTINCT 'month' as descr,month as val FROM items
    UNION
    SELECT DISTINCT 'day' as descr,day as val FROM items
    UNION
    SELECT DISTINCT 'hour' as descr,hour as val FROM items";

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

while($row = mysql_fetch_array($result)) {
    $make_array[$row['descr']][]=$row['val'];
}

独特的日子有什么用?“还有几个小时?”上校的弹片与这个问题无关。它们只是这个例子的样本值。你知道,你的整个问题与常识没有多大关系。我只是想弄明白你为什么需要这样不寻常的东西。
union
附加行而不是列,所以你的查询是在构建一个大表,其中有很多记录,只有一列。想想看,当每个查询都有不同数量的记录时,它怎么能给你多个列呢?@Col Shrapnel我理解你的好奇,为什么我会使用唯一的天数和时间。在我的实际剧本中,我不是。我只是为这个例子选择了任意的值,而不是公布我的实际数据。@标记这将做你想做的事情,尽管我不确定你想做的事情是否有意义。您可能也可以将它们作为单独的查询来执行。当然,不要不同意@bemace的说法,尽管从Mark的评论来看,这可能只是一个伪示例——也许这种方法对他的应用程序更有意义。