2016-08-11 34 views
-3

我有一個酒店數據庫有一個表,其中包含由逗號分隔的電話號碼組成的列。 我想分組匹配的電話號碼,以便具有相同電話號碼的酒店(例如:連鎖酒店通用的免費電話號碼)落入同一組ID。例如:A的電話號碼爲1,2; B有2,3和C有3,4。然後,他們都應該在同一組。如何在php中將mysql數據標準化並將組數據匹配到不同的組中?

謝謝!

+0

這是一個非常普遍的問題,只有很少的細節可以給出一個很好的答案或值得花費時間來創建一個好的答案。請添加更多細節,例如您已經或嘗試過的某些表格設計。您當前正在使用的SQL。 – pcnate

回答

0

如果我正確理解這一點。您將需要創建兩個新表格;

PhoneNumbers 
phone_id int auto-increment - Will hold the phone numbers unique Id 
telephone varchar(30) - Will hold the phone number itself 

Hotel_PhoneNumbers 
hotel_id int - The id of the hotel 
phone_id int - The id of the phone number 

你需要創建一個PHP腳本,通過每家酒店拉的所有酒店您的數據庫,環路和電話號碼字段爆炸到一個數組。然後,您要循環訪問電話陣列,並將電話號碼添加到新的PhoneNumbers表中,以檢查它是否已經存在。如果它已經存在,那麼你需要獲取PhoneNumbers Id。

然後,使用新的Hotel_PhoneNumbers表創建一個包含PhoneNumber Id和Hotel Id的新行。這將電話號碼鏈接到酒店。

通過這樣做,PhoneNumbers表將只包含唯一的電話號碼,但可以鏈接到多個酒店。

我不能專門給你這樣做的代碼,因爲我不知道你如何與你的數據庫進行通信。我使用Laravel和雄辯,所以它可能看起來像這樣;

$hotels = Hotel::all(); 

foreach ($hotels as $hotel) { 
    $numbers = explode(',' $hotel->phone); 

    if (count($numbers) > 0) { 
     foreach ($numbers as $number) { 
      // See if the PhoneNumber already exists in the database 
      $phoneNumber = PhoneNumber::where('telephone', $number); 

      // If the phone number doesn't exist, we need to add the number to the database 
      if (is_null($phoneNumber)) { 
       // Create a new phone number 
       $phoneNumber = new PhoneNumber(); 
       $phoneNumber->telephone = $number; 
       $phoneNumber->save(); 
      } 

      // Check if the hotel is already linked to the phone number in the database 
      $hotelPhoneNumber = HotelPhoneNumber::where('hotel_id', $hotel->id)->where('phone_id', $phoneNumber->id); 

      // If the hotel isn't linked to the number, create the link 
      if (is_null($hotelPhoneNumber)) { 
       $hotelPhoneNumber = new HotelPhoneNumber(); 
       $hotelPhoneNumber->hotel_id = $hotel->id; 
       $hotelPhoneNumber->phone_id = $phoneNumber->id; 
       $hotelPhoneNumber->save(); 
      } 
     } 
    } 
} 
相關問題