如何规范化 php 中的 mysql 数据并将匹配数据分组到单独的组中?
How do I normalize mysql data in php and group matching data into separate groups?
我有一个酒店数据库,其中有一个 table,其中有一列由 phone 个数字组成,用逗号分隔。
我想对匹配的 phone 号码进行分组,以便具有相同 phone 号码的酒店(例如:连锁酒店常见的免费电话号码)属于同一组 ID。
例如:A 有 phone 个数字 1,2; B 有 2,3,C 有 3,4。那么他们都应该在同一个组中。
谢谢!
如果我理解正确的话。您将要创建两个新的 tables;
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 脚本以将所有酒店从您的数据库中拉出,遍历每个酒店并将 phone 数字字段分解为一个数组。然后你想遍历 phone 数组并将 phone 号码添加到新的 PhoneNumbers table 中,检查它是否不存在。如果它已经存在,那么您需要获取 PhoneNumbers Id。
然后,使用新的 Hotel_PhoneNumbers table,创建一个包含电话号码 ID 和酒店 ID 的新行。这会将 phone 个号码链接到酒店。
通过这样做,PhoneNumbers table 将只包含唯一的 phone 号码,但可以链接到多个酒店。
我不能具体地为您提供执行此操作的代码,因为我不知道您如何与数据库通信。我使用 Laravel 和 Eloquent,所以它可能看起来像这样;
$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();
}
}
}
}
我有一个酒店数据库,其中有一个 table,其中有一列由 phone 个数字组成,用逗号分隔。 我想对匹配的 phone 号码进行分组,以便具有相同 phone 号码的酒店(例如:连锁酒店常见的免费电话号码)属于同一组 ID。 例如:A 有 phone 个数字 1,2; B 有 2,3,C 有 3,4。那么他们都应该在同一个组中。
谢谢!
如果我理解正确的话。您将要创建两个新的 tables;
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 脚本以将所有酒店从您的数据库中拉出,遍历每个酒店并将 phone 数字字段分解为一个数组。然后你想遍历 phone 数组并将 phone 号码添加到新的 PhoneNumbers table 中,检查它是否不存在。如果它已经存在,那么您需要获取 PhoneNumbers Id。
然后,使用新的 Hotel_PhoneNumbers table,创建一个包含电话号码 ID 和酒店 ID 的新行。这会将 phone 个号码链接到酒店。
通过这样做,PhoneNumbers table 将只包含唯一的 phone 号码,但可以链接到多个酒店。
我不能具体地为您提供执行此操作的代码,因为我不知道您如何与数据库通信。我使用 Laravel 和 Eloquent,所以它可能看起来像这样;
$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();
}
}
}
}