2014-07-04 2 views
0

У меня есть 3 таблицы базы данных. 1 имеет детали, 1 имеет функции и 1 имеет часы. Таблица функций и часов имеет идентификатор и идентификатор из таблицы подробностей. То, что я пытаюсь сделать, это создать 1 массив с 3 массивами в нем, один для деталей, 1 для функций и 1 в течение нескольких часов. Вот мой код:Почему мои результаты MySQL неожиданно повторяются?

$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))) 

Как получить результаты в 3 массива внутри 1 массива без повторения данных?

Таковы результаты, которые я получаю, когда я ввожу запрос в PhpMyAdmin:

enter image description here

То, что я ищу, 1 массив с идентификатором, имя, футы, адрес, телефон, galleryid и virtualtourid, 1 с функциями (без повторов) и 1 массив с часами (без повторов).

+0

результаты повторяющейся потому, что ваш запрос возвращает повторяющиеся результаты. Нет никакого способа, чтобы этот код вносил обманы в массив, если только у результатов не было обмана. Вы запустили этот запрос вручную и посмотрели, какие результаты? –

+0

yes Я запустил этот запрос в phpmyadmin, и мои результаты в моем вопросе в виде изображения. – user3723240

+1

Если вы правильно отформатировали дамп массива, вы увидите, что они ** НЕ ** повторяются.значения 'hour' меняются, точно так же, как и в вашем screencap. –

ответ

1

Я хотел бы использовать GROUP_CONCAT группе часы:

ВЫБРАТЬ modelHomes. id, 'testname' как name, modelHomes. sqft, '123 Fake St' as address, '555-5555' as phone, modelHomes. galleryid, modelHomes. virtualtourid, modelHomeFeatures. text, как feature, GROUP_CONCAT (modelHomeHours. text), как hour ОТ modelHomes INNER JOIN modelHomeFeatures ПО modelHomeFeatures. modelhomeid = modelHomes. id INNER JOIN modelHomeHours ON modelHomeHours. modelhomeid = modelHomes. id GROUP BY modelHomes.id

TRY ЭТУ

$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 
+0

Это не то, что я ищу ... Я не думаю, что моя проблема была с моим запросом, я думаю, что это больше на стороне php и что я делаю с моими результатами. – user3723240

+0

Моя единственная проблема в том, что когда я GROUP_CONCAST (modelHomeFeatures.text) функции повторяются – user3723240

+0

попробуйте другой aproach для запроса – bitsm

Смежные вопросы