Я изучаю php. Я пишу php-скрипт. Этот скрипт должен получить значение столбца "улица" из таблицы "branch", которая находится в моей базе данных. Значения в этой колонке представлены в формате "Краковская 50А". Затем я использую preg match, чтобы разделить это значение на уличное название "Karkowska" и номер дома "50A". Результаты pregmatch, я хочу вставить в таблицу "location" в столбцах "street" и "house_number". Может кто-нибудь объяснить мне, что не так с моим кодом и почему это не работает? Спасибо :)
EDIT: Preg match работает, проблема заключается в том, что запрос не работает.
EDIT2: Хорошо, я думаю, проблема в том, что $ streetName или $ streetNumber пуст, и мне нужно вставить NULL. Это правильно? Как изменить запрос, чтобы сделать это?
EDIT3: обновить код, теперь он работает, но только вставляет первое значение результатов соответствия результатов. Я не знаю, как вставлять значения в расположение таблицы для id = 1, id = 2, id = 3,... из ветки таблицы.
<?php
$db = mysqli_connect('localhost','root','','jakoscobslugi')
or die('Error connecting to MySQL server.');
$query0 = "TRUNCATE location";
mysqli_query($db,$query0) or die('Error query0.');
$result = mysqli_query($db, "SELECT street FROM branch;");
while($row = mysqli_fetch_assoc($result))
{
preg_match('/\s?([^\d]+\s?)\s?(\d+.*)*/', $row['street'], $street);
//$streetName = $street[1];
//$streetNumber = $street[2];
echo "[". $street[1] ."] [". $street[2] ."]";
echo "<br />";
$query2 = "INSERT INTO location(id, street, house_number, phone_number)
SELECT id, '$street[1]', '$street[2]', phone
FROM branch
ON DUPLICATE KEY UPDATE id=branch.id, phone_number=branch.phone";
mysqli_query($db, $query2) or die('Error query2: ' . mysqli_error($db));
}
?>
Это мое место в таблице, которое я не писал, и я не могу его изменить:
CREATE TABLE 'location' (
'id' int(11) NOT NULL,
'company_data_id' int(11) DEFAULT NULL,
'street' varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
'house_number' varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
'apartment_number' varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
'postal_code' varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
'city' varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
'phone_number' varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
'type' varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
'created_at' datetime DEFAULT NULL,
'updated_at' datetime DEFAULT NULL
) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
ALTER TABLE 'location'
ADD PRIMARY KEY ('id'),
ADD KEY 'IDX_5E9E89CB17A7BBEB' ('company_data_id');
Первичного ключа нет, определение таблицы неверно.
Должно быть:
CREATE TABLE 'location' (
'id' int(11) AUTO_INCREMENT PRIMARY KEY,
'company_data_id' int(11) DEFAULT NULL,
'street' varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
'house_number' varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
'apartment_number' varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
'postal_code' varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
'city' varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
'phone_number' varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
'type' varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
'created_at' datetime DEFAULT NULL,
'updated_at' datetime DEFAULT NULL
) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
В твоем случае:
ALTER TABLE location CHANGE id id int(11) AUTO_INCREMENT PRIMARY KEY;
VALUES ( 'streetName', blablabla