Вывод MySQL с префиксом с использованием * - PullRequest
2 голосов
/ 09 июня 2011

Например, у нас есть этот запрос:

SELECT c.*, cu.* FROM cart c, customer cu WHERE cu.id = c.customerId

Теперь я получу все данные тележек + соответствующего клиента.Но мне бы хотелось иметь этот префикс или отдельные объекты в качестве следующего объекта.

Версия PREFIX:

result:

cartid = 384
cartstatus = 5
customerid = 443
customername = 593

Версия объекта:

результат:

cart: {
  id: 384,
  status: 5
},
customer: {
  id: 443,
  name: 593
}

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 09 июня 2011

Я не думаю, что MySQL позволяет вам извлекать данные как «объекты» так, как вы хотели бы их иметь.Другие СУБД знают UDT, но MySQL нет.

Если вы хотите иметь префиксы, вам придется добавлять псевдонимы к своим полям по одному, то есть

select c.id as cartid,
       c.status as cartstatus,
       cu.id as customerid,
       cu.name as customername
from cart c, customer cu 
where cu.id = c.customerId

Если вам часто нужны эти префиксыпрефиксы в результатах запроса на присоединение, тогда я бы порекомендовал добавить их непосредственно в столбцы таблицы или, если это не легко сделать, создать представления следующим образом:

create view v_cart as
select id as cart_id,
       status as cart_status
from cart;

create view v_customer as
select id as customer_id,
       name as customer_name
from customer;

Затем вы можете легко использовать эти представления:

select * from v_cart, v_customer where customer_id = cart_customer_id;
0 голосов
/ 09 июня 2011

Если бы мне потребовался такой запрос, я бы использовал запрос, подобный

$sql = "SELECT c.id AS cartid,c.*,cu.* FROM c,cu WHERE cu.id = c.customerId";
$result = mysql_query($sql) or die(mysql_error());

. Хитрость здесь в том, чтобы создать псевдоним для любых дублированных имен столбцов, таких как "id" в вашем SQLзапрос, например,

users.id AS user_id

Это позволяет нам переопределить users.id, чтобы его можно было использовать на нашей странице как user_id при создании переменной.В моем текущем веб-приложении у меня есть 2 таблицы с дублированными столбцами «id», на которых я тестировал это решение.

В целях демонстрации, чтобы помочь с реализацией рабочего решения, которое я использую PHP, вы можете проигнорировать это, если оно не относится к вам, и написать код на предпочитаемом вами языке.

Выходные данные SQL могут затем использоваться как

$cartid = $result['cartid'];
$customerid = $result['customerId'];

с переменными $ cartid, $ customerid и любыми другими, указанными доступными для использования в вашем PHP, например,

<? echo $customerid.', your are currently using '.$cartid.', please make sure this is correct'; ?>

Чтобы помочь вам определить ваши переменные, вы можете сделать что-то вроде

print_r($result);

Это отобразит массив вроде

Array ([id] => 1 [user_id] => 2 [shop_name] => My Shop)

Чтобы создать переменные, просто определите $ result какИД массива, например

$id = $result['id'];
$customerid = $result['user_id'];
$shopname = $result['shop_name'];

И так до тех пор, пока все переменные, которые вам нужно определить, не будут определены.

Это то, что вы ищете?Возможно, вам придется скорректировать строку запроса, так как это из памяти последнего раза, когда я делал что-то подобное примерно 2 года назад.

Надеюсь, это поможет.

ПРИМЕЧАНИЕ: это начало меня беспокоить, поэтому я вытащил старый код с сервера, я отредактировал этот пост, чтобы исправить синтаксис, как я использовал ранее, предыдущий метод, который я разместил, не поддерживается PHP, однако этотАльтернатива дает желаемый результат с минимальными изменениями исходного запроса:)

...