我有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中输入查询时得到的结果:
我正在寻找的是1个数组,其中包含id,name,sqft,address,phone,galleryid和virtualtourid,1个数组包含功能(无重复)和1个数组包含小时数(无重复)。
答案 0 :(得分:1)
我会使用group_concat对小时进行分组:
选择modelHomes
。id
,' testname'作为name
,modelHomes
。sqft
,
' 123假St'如address
,' 555-5555'作为phone
,modelHomes
。galleryid
,
modelHomes
。virtualtourid
,modelHomeFeatures
。text
为feature
,
GROUP_CONCAT(modelHomeHours
。text
)为hour
来自modelHomes
INNER JOIN modelHomeFeatures
ON modelHomeFeatures
。modelhomeid
= modelHomes
。id
INNER JOIN modelHomeHours
ON modelHomeHours
。modelhomeid
= modelHomes
。id
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