После объединения двух таблиц у меня есть дубликаты имен столбцов. Как я могу различать имена и извлекать данные в PHP.
Таблица услуг:
+----+-------+--------+ | id | price | userID | +----+-------+--------+ | 1 | 435 | 33 | | 2 | 543 | 32 | | 3 | 7646 | 33 | | 4 | 7966 | 31 | | 5 | 394 | 31 | | 6 | 569 | 31 | | 7 | 203 | 32 | | 8 | 439 | 32 | | 9 | 329 | 33 | | 10 | 998 | 31 | +----+-------+--------+
Таблица клиентов:
+----+-------+-------+ | id | name | zip | +----+-------+-------+ | 30 | Joe | 45698 | | 31 | Bill | 87848 | | 32 | Cris | 56879 | | 33 | Sarah | 35411 | | 34 | Nova | 59874 | | 35 | Lo | 99874 | +----+-------+-------+
Присоединитесь к ним, используя этот запрос:
SELECT * FROM services AS s, customers AS c WHERE s.userID=c.id
Стол:
+----+-------+--------+----+-------+-------+ | id | price | userID | id | name | zip | +----+-------+--------+----+-------+-------+ | 1 | 435 | 33 | 33 | Sarah | 35411 | | 2 | 543 | 32 | 32 | Cris | 56879 | | 3 | 7646 | 33 | 33 | Sarah | 35411 | | 4 | 7966 | 31 | 31 | Bill | 87848 | | 5 | 394 | 31 | 31 | Bill | 87848 | | 6 | 569 | 31 | 31 | Bill | 87848 | | 7 | 203 | 32 | 32 | Cris | 56879 | | 8 | 439 | 32 | 32 | Cris | 56879 | | 9 | 329 | 33 | 33 | Sarah | 35411 | | 10 | 998 | 31 | 31 | Bill | 87848 | +----+-------+--------+----+-------+-------+
Когда я запускаю этот скрипт, я хочу получить два результата в столбцах id (например, 1 и 33 в первой строке):
$query = "SELECT * FROM services AS s, customers AS c WHERE s.userID=c.id"; $result = $link->query($query); while($var = mysqli_fetch_array($result)) { print_r($var); //I would like to get them similar to this... //$id1 = $var['id']; //$id2 = $var['id']; }
Результат (обратите внимание, что для обоих столбцов id нет ключа. Первый – [0] => 1 и не имеет именованного ключа):
Array ( [0] => 1 [id] => 33 [1] => 435 [price] => 435 [2] => 33 [userID] => 33 [3] => 33 [4] => Sarah [name] => Sarah [5] => 35411 [zip] => 35411 )
В любом случае, нужно связать ключ с разными идентификаторами, не делая для каждого столбца с двойным именем следующее:
$query = "SELECT *, c.id AS myNewID FROM services AS s, customers AS c WHERE s.userID=c.id";
Единственный способ разграничения между ними – использовать AS
для применения псевдонима. Например, что-то вроде этого:
SELECT s.id AS serviceID, c.id AS customerID FROM services s JOIN cusomters c ON c.id = s.userID;
Таким образом, вы можете ссылаться на столбцы позже, используя serviceID
или customerID
, в зависимости от реализации.