为什么我的MySQL结果会意外重复?

时间:2014-07-04 15:16:23

标签: php mysql arrays

我有3个数据库表。 1有详细信息,1有功能,1有小时。功能和小时表的详细信息表中包含id和id。我要做的是创建一个包含3个数组的数组,一个用于细节,一个用于功能,1个用于小时。这是我的代码:

$query = mysqli_query($connection, "
SELECT `modelHomes`.`id`, 'testname' as `name`, `modelHomes`.`sqft`,
    '123 Fake St' as `address`, '555-5555' as `phone`, `modelHomes`.`galleryid`,
    `modelHomes`.`virtualtourid`, `modelHomeFeatures`.`text` as `feature`,
    `modelHomeHours`.`text` as `hour`
FROM `modelHomes`
INNER JOIN `modelHomeFeatures` ON `modelHomeFeatures`.`modelhomeid` = `modelHomes`.`id`
INNER JOIN `modelHomeHours` ON `modelHomeHours`.`modelhomeid` = `modelHomes`.`id`
");

                $results = array();
                while($row = mysqli_fetch_assoc($query)){

                        $results[] = $row;

                }
                return $results;

它返回:

  

Array ( [0] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => 4 Bedrooms [hour] => Mon-Thurs 1pm-6pm ) [1] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => 4 Bedrooms [hour] => Friday 12pm-5pm ) [2] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => 4 Bedrooms [hour] => Sat-Sun 12pm-5pm ) [3] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => 2 Sided Gas Fireplace [hour] => Mon-Thurs 1pm-6pm ) [4] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => 2 Sided Gas Fireplace [hour] => Friday 12pm-5pm ) [5] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => 2 Sided Gas Fireplace [hour] => Sat-Sun 12pm-5pm ) [6] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => All Oak Staircase with Open Risers [hour] => Mon-Thurs 1pm-6pm ) [7] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => All Oak Staircase with Open Risers [hour] => Friday 12pm-5pm ) [8] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => All Oak Staircase with Open Risers [hour] => Sat-Sun 12pm-5pm ) [9] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => Upgraded Hardwood Flooring & Berber Carpet [hour] => Mon-Thurs 1pm-6pm ) [10] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => Upgraded Hardwood Flooring & Berber Carpet [hour] => Friday 12pm-5pm ) [11] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => Upgraded Hardwood Flooring & Berber Carpet [hour] => Sat-Sun 12pm-5pm ) [12] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => Upgraded Ceramic Backsplash [hour] => Mon-Thurs 1pm-6pm ) [13] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => Upgraded Ceramic Backsplash [hour] => Friday 12pm-5pm ) [14] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => Upgraded Ceramic Backsplash [hour] => Sat-Sun 12pm-5pm ) [15] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => 9' Main Floor Ceilings [hour] => Mon-Thurs 1pm-6pm ) [16] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => 9' Main Floor Ceilings [hour] => Friday 12pm-5pm ) [17] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => 9' Main Floor Ceilings [hour] => Sat-Sun 12pm-5pm ) [18] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => Fruit Cellar Under Porch [hour] => Mon-Thurs 1pm-6pm ) [19] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => Fruit Cellar Under Porch [hour] => Friday 12pm-5pm ) [20] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => Fruit Cellar Under Porch [hour] => Sat-Sun 12pm-5pm ) [21] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => Upgraded Wrap Around Porch [hour] => Mon-Thurs 1pm-6pm ) [22] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => Upgraded Wrap Around Porch [hour] => Friday 12pm-5pm ) [23] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => Upgraded Wrap Around Porch [hour] => Sat-Sun 12pm-5pm ) )

我不知道为什么结果会不断重复。我试图像这样调整我的代码:

$results['hours'][] = $row['hour'];
$results['features'][] = $row['feature'];
$results['details'][] = $row;

但我的结果也在不断重复。这是我得到的输出:

Array ( [hours] => Array ( [0] => Mon-Thurs 1pm-6pm [1] => Friday 12pm-5pm [2] => Sat-Sun 12pm-5pm [3] => Mon-Thurs 1pm-6pm [4] => Friday 12pm-5pm [5] => Sat-Sun 12pm-5pm [6] => Mon-Thurs 1pm-6pm [7] => Friday 12pm-5pm [8] => Sat-Sun 12pm-5pm [9] => Mon-Thurs 1pm-6pm [10] => Friday 12pm-5pm [11] => Sat-Sun 12pm-5pm [12] => Mon-Thurs 1pm-6pm [13] => Friday 12pm-5pm [14] => Sat-Sun 12pm-5pm [15] => Mon-Thurs 1pm-6pm [16] => Friday 12pm-5pm [17] => Sat-Sun 12pm-5pm [18] => Mon-Thurs 1pm-6pm [19] => Friday 12pm-5pm [20] => Sat-Sun 12pm-5pm [21] => Mon-Thurs 1pm-6pm [22] => Friday 12pm-5pm [23] => Sat-Sun 12pm-5pm ) [features] => Array ( [0] => 4 Bedrooms [1] => 4 Bedrooms [2] => 4 Bedrooms [3] => 2 Sided Gas Fireplace [4] => 2 Sided Gas Fireplace [5] => 2 Sided Gas Fireplace [6] => All Oak Staircase with Open Risers [7] => All Oak Staircase with Open Risers [8] => All Oak Staircase with Open Risers [9] => Upgraded Hardwood Flooring & Berber Carpet [10] => Upgraded Hardwood Flooring & Berber Carpet [11] => Upgraded Hardwood Flooring & Berber Carpet [12] => Upgraded Ceramic Backsplash [13] => Upgraded Ceramic Backsplash [14] => Upgraded Ceramic Backsplash [15] => 9' Main Floor Ceilings [16] => 9' Main Floor Ceilings [17] => 9' Main Floor Ceilings [18] => Fruit Cellar Under Porch [19] => Fruit Cellar Under Porch [20] => Fruit Cellar Under Porch [21] => Upgraded Wrap Around Porch [22] => Upgraded Wrap Around Porch [23] => Upgraded Wrap Around Porch ) [details] => Array ( [0] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => 4 Bedrooms [hour] => Mon-Thurs 1pm-6pm ) [1] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => 4 Bedrooms [hour] => Friday 12pm-5pm ) [2] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => 4 Bedrooms [hour] => Sat-Sun 12pm-5pm ) [3] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => 2 Sided Gas Fireplace [hour] => Mon-Thurs 1pm-6pm ) [4] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => 2 Sided Gas Fireplace [hour] => Friday 12pm-5pm ) [5] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => 2 Sided Gas Fireplace [hour] => Sat-Sun 12pm-5pm ) [6] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => All Oak Staircase with Open Risers [hour] => Mon-Thurs 1pm-6pm ) [7] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => All Oak Staircase with Open Risers [hour] => Friday 12pm-5pm ) [8] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => All Oak Staircase with Open Risers [hour] => Sat-Sun 12pm-5pm ) [9] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => Upgraded Hardwood Flooring & Berber Carpet [hour] => Mon-Thurs 1pm-6pm ) [10] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => Upgraded Hardwood Flooring & Berber Carpet [hour] => Friday 12pm-5pm ) [11] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => Upgraded Hardwood Flooring & Berber Carpet [hour] => Sat-Sun 12pm-5pm ) [12] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => Upgraded Ceramic Backsplash [hour] => Mon-Thurs 1pm-6pm ) [13] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => Upgraded Ceramic Backsplash [hour] => Friday 12pm-5pm ) [14] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => Upgraded Ceramic Backsplash [hour] => Sat-Sun 12pm-5pm ) [15] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => 9' Main Floor Ceilings [hour] => Mon-Thurs 1pm-6pm ) [16] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => 9' Main Floor Ceilings [hour] => Friday 12pm-5pm ) [17] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => 9' Main Floor Ceilings [hour] => Sat-Sun 12pm-5pm ) [18] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => Fruit Cellar Under Porch [hour] => Mon-Thurs 1pm-6pm ) [19] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => Fruit Cellar Under Porch [hour] => Friday 12pm-5pm ) [20] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => Fruit Cellar Under Porch [hour] => Sat-Sun 12pm-5pm ) [21] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => Upgraded Wrap Around Porch [hour] => Mon-Thurs 1pm-6pm ) [22] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => Upgraded Wrap Around Porch [hour] => Friday 12pm-5pm ) [23] => Array ( [id] => 1 [name] => testname [sqft] => 2501 [address] => 123 Fake St [phone] => 555-5555 [galleryid] => 9 [virtualtourid] => 1 [feature] => Upgraded Wrap Around Porch [hour] => Sat-Sun 12pm-5pm ) ) )

如何在不重复数据的情况下将结果放入1个数组中的3个数组?

这些是我在phpMyAdmin中输入查询时得到的结果:

enter image description here

我正在寻找的是1个数组,其中包含id,name,sqft,address,phone,galleryid和virtualtourid,1个数组包含功能(无重复)和1个数组包含小时数(无重复)。

1 个答案:

答案 0 :(得分:1)

我会使用group_concat对小时进行分组:

选择modelHomesid,' testname'作为namemodelHomessqft,     ' 123假St'如address,' 555-5555'作为phonemodelHomesgalleryid,     modelHomesvirtualtouridmodelHomeFeaturestextfeature,     GROUP_CONCAT(modelHomeHourstext)为hour 来自modelHomes INNER JOIN modelHomeFeatures ON modelHomeFeaturesmodelhomeid = modelHomesid INNER JOIN modelHomeHours ON modelHomeHoursmodelhomeid = modelHomesid GROUP BY modelHomes.id

尝试

$query = mysqli_query($connection,"SELECT modelHomes.id, 'testname' as name, modelHomes.sqft,'123 Fake St' as address, '555-5555' as phone, modelHomes.galleryid,modelHomes.virtualtourid,
                                      modelHomeFeatures.text as feature,GROUP_CONCAT(modelHomeHours.text) as hour
                                     FROM modelHomes
                               INNER JOIN modelHomeFeatures ON modelHomeFeatures.modelhomeid = modelHomes.id
                               INNER JOIN modelHomeHours ON modelHomeHours.modelhomeid = modelHomes.id
                             GROUP BY modelHomes.id");
$results = array();
while($row = mysqli_fetch_assoc($query)){
    $ahours=explode(",",$row["hour"]);
    array_push($results,array(id=>$row["id"],
                              name=>$row["name"],
                              sqft=>$row["sqft"],
                              address=>$row["address"],
                              phone=>$row["phone"],
                              galleryid=>$row["galleryid"],
                              virtualtourid=>$row["virtualtourid"],
                              feature=>$row["feature"],
                              hour=>$ahours));
}
return $results;

查询的另一种方式

    SELECT modelHomes.id, 'testname' as name, modelHomes.sqft,
           '123 Fake St' as address, '555-5555' as phone, 
           modelHomes.galleryid,modelHomes.virtualtourid,
           (SELECT GROUP_CONCAT(modelHomeFeatures.text) 
              FROM modelHomeFeatures 
             WHERE modelHomeFeatures.modelhomeid = modelHomes.id) as feature,
           (SELECT GROUP_CONCAT(modelHomeHours.text) 
              FROM modelHomeHours 
             WHERE modelHomeHours.modelhomeid = modelHomes.id) as hour
      FROM modelHomes
  GROUP BY modelHomes.id