2010-12-14 94 views
2

我有以下查詢:幫助MySQL查詢

SELECT u.uid, pf.title, pv.value FROM users AS u INNER JOIN 
profile_values AS pv ON pv.uid = u.uid 
INNER JOIN 
profile_fields AS pf ON pf.fid = pv.fid 
ORDER BY u.uid 

導致:

uid  title value 
1 First name Jared 
1 Last name Boo 
1 Organization Acme 
1 Website http://acme.com 
1 Country Canada 
6 First name Nathan 
6 Last name Foo 

我試圖用這個結果來創建另一個結果集,它看起來是這樣的:

uid First name Last name Organization Website Country 
1 Jared  Boo  Acme   http... Canada 
6 Nathan  Foo 

我正確地處理這個問題嗎?

在此先感謝

編輯

表:

CREATE TABLE `users` (
    `uid` int(10) unsigned NOT NULL auto_increment, 
    `name` varchar(60) NOT NULL default '', 
    `pass` varchar(32) NOT NULL default '', 
    `mail` varchar(64) default '', 
    `created` int(11) NOT NULL default '0', 
    `access` int(11) NOT NULL default '0', 
    PRIMARY KEY (`uid`), 
    UNIQUE KEY `name` (`name`), 
    KEY `access` (`access`), 
    KEY `created` (`created`), 
    KEY `mail` (`mail`) 
); 

CREATE TABLE `profile_fields` (
    `fid` int(11) NOT NULL auto_increment, 
    `title` varchar(255) default NULL, 
    `name` varchar(128) NOT NULL default '', 
    `explanation` text, 
    `category` varchar(255) default NULL, 
    PRIMARY KEY (`fid`), 
    UNIQUE KEY `name` (`name`), 
    KEY `category` (`category`) 
); 

CREATE TABLE `profile_values` (
    `fid` int(10) unsigned NOT NULL default '0', 
    `uid` int(10) unsigned NOT NULL default '0', 
    `value` text, 
    PRIMARY KEY (`uid`,`fid`), 
    KEY `fid` (`fid`) 
); 
+0

當一個用戶有多個名字時會發生什麼? – 2010-12-14 22:17:50

+0

另外,你打算動態生成列標題,還是在查詢中定義它應該提取哪些字段? – 2010-12-14 22:18:54

+0

用戶不會有任何一個字段。對於我來說,使用「標題」的值作爲列標題似乎很合理 – 2010-12-14 22:22:13

回答

0
SELECT u.uid, pf.title, pv.value 
FROM users AS u, profile_values AS pv, profile_fields AS pf 
WHERE pv.id = u.uid, pf.fid = pv.fid 
ORDER BY u.uid 

是這樣的你找什麼呢?外鍵是什麼樣的表?您可能想要在SELECT之後立即丟棄DISTINCT

0

這都是正確的。目前尚不清楚組織,網站,國家/地區字段應該來自哪裏(因爲我們不知道您的數據庫結構),但是,例如,如果countryprofile_fields的列,則只需添加SELECT ..., pf.country ...即可獲取所需的數據。

0

看來你的模式不能準確地維護所需的信息。首先在User表中,您將名稱設置爲1屬性,因此必須通過其他方式來分隔名和姓。其次,不清楚公司名稱或網站信息的存儲位置。請提供從所需輸出到數據庫表中屬性的邏輯映射。