2011-06-09 54 views
2

例如,我們有這個疑問:MySQL的輸出與前綴使用*

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

現在,我將得到車+對應客戶的所有數據。但我希望將前面的內容或單獨的對象作爲以下對象。

PREFIX版本:

結果:

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

對象版本:

結果:

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

什麼想法?

+0

通常,在select子句中使用*是一個混亂的做法,應該避免。解決方案是使用明確的列引用和明確的別名。 – symcbean 2011-06-09 11:37:34

+0

MySQL沒有「對象」。你打算如何達到這個產出? – 2011-06-09 14:01:36

回答

2

我不認爲MySQL允許您將數據作爲「對象」獲取,因爲您希望擁有它們。其他RDBMS知道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; 
+1

Txs,我很擔心我必須這樣做...看到我必須使用現有的數據庫,並且需要爲每個查詢執行此操作,但是要感謝輸入! – 2011-06-09 12:15:00

+0

或者,你可以使用視圖來爲你做別名... – 2011-06-09 12:16:33

+0

txs我會牢記:) – 2011-06-09 12:47:55

0

如果我需要這樣的查詢,我會使用類似

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

這裏的關鍵是要對任何重複的列名,如您的SQL查詢「身份證」創建別名查詢,因此,例如

users.id AS user_id 

這讓我們重新定義users.id所以這是我們作爲USER_ID頁面可用時,我們創建變量。使用我目前的網絡應用程序,我確實有2個表格帶有重複的「id」列,我已經測試了此解決方案。

爲了演示如何幫助實施工作解決方案,我使用的是PHP,如果它與您無關並且使用您的首選語言進行編碼,則可以忽略它。

的SQL輸出可以被用來作爲

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

與變量$ cartid,$客戶ID和其他任何指定的是在你的PHP使用avaliable,例如

<? 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) 

陣列要創建變量只需定義$結果作爲數組ID喜歡

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

依此類推,直到你需要定義是所有變量。

這是你在找什麼?您可能需要調整查詢字符串,因爲這是來自上次大約兩年前沿着這些行做的事情的內存。

我希望它有幫助。

注意:它開始誤導我,所以我從服務器上拉出了舊代碼,我已經編輯了這篇文章以糾正之前使用的語法,我發佈的以前的方法不受PHP支持,但是此替代方法期望的結果,對原始查詢進行最小的更改:)

+0

你確定,PHP實際上可以訪問別名字段名稱嗎?即'c.id'?我會很驚訝,如果表別名會使它的應用程序邏輯... – 2011-06-09 12:12:28

+0

我試過,但沒有得到任何輸出......也許有一步在代碼中缺少? – 2011-06-09 12:22:29

+0

我之前做過,但大約2年前,正如我所提到的......我將不得不在今晚或明天挖掘代碼 – Ryan 2011-06-09 12:23:08