我認爲自己在理解和操作C-ish語言方面相當有能力;我想出一個算法並用任何C語言實現它都不是問題。什麼是構建MySQL查詢的結構化方式?
編寫SQL(在我的具體情況下,MySQL)查詢有很大的困難。對於非常簡單的查詢,這不是問題,但對於複雜的查詢,我會感到沮喪,不知道從哪裏開始。閱讀MySQL文檔是很困難的,主要是因爲語法描述和解釋沒有很好地組織。
例如,SELECT
文檔是各地圖:它開始時的看上去像是僞BNF,但之後(因爲骨料的說明文字是不能點擊...喜歡select_expr
)很快的不滿轉化這種嘗試通過打開許多瀏覽器窗口來自定義語法的令人沮喪的練習。
足夠的嗚嗚聲。
我想知道人們如何逐步開始構建複雜的MySQL查詢。這裏是一個具體的例子。下面有三張表。我想SELECT
一組行具有以下特點:
從userInfo
和userProgram
表,我想選擇userName
,isApproved
和modifiedTimestamp
領域和UNION
他們到一組。從這組數據中,我想要ORDER
,modifiedTimestamp
對於每個用戶取MAX(modifiedTimestamp)
(即,應該只有一行具有唯一的userName
,並且與該用戶名相關聯的時間戳應該儘可能高)。
從user
表,我想匹配的firstName
並與該userName
,使它看起來像這樣有關lastName
:
+-----------+----------+----------+-------------------+
| firstName | lastName | userName | modifiedTimestamp |
+-----------+----------+----------+-------------------+
| JJ | Prof | jjprofUs | 1289914725 |
| User | 2 | user2 | 1289914722 |
| User | 1 | user1 | 1289914716 |
| User | 3 | user3 | 1289914713 |
| User | 4 | user4 | 1289914712 |
| User | 5 | user5 | 1289914711 |
+-----------+----------+----------+-------------------+
最近我有一個查詢,看起來像這樣的:
(SELECT firstName, lastName, user.userName, modifiedTimestamp
FROM user, userInfo
WHERE user.userName=userInfo.userName)
UNION
(SELECT firstName, lastName, user.userName, modifiedTimestamp
FROM user, userProgram
WHERE user.userName=userProgram.userName)
ORDER BY modifiedTimestamp DESC;
我覺得我很接近,但我不知道在哪裏可以從這裏走,甚至如果我在正確的方式思考這個。
> user
+--------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+-------+
| userName | char(8) | NO | PRI | NULL | |
| firstName | varchar(255) | NO | | NULL | |
| lastName | varchar(255) | NO | | NULL | |
| email | varchar(255) | NO | UNI | NULL | |
| avatar | varchar(255) | YES | | '' | |
| password | varchar(255) | NO | | NULL | |
| passwordHint | text | YES | | NULL | |
| access | int(11) | NO | | 1 | |
| lastLoginTimestamp | int(11) | NO | | -1 | |
| isActive | tinyint(4) | NO | | 1 | |
+--------------------+--------------+------+-----+---------+-------+
> userInfo
+-------------------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+------------+------+-----+---------+-------+
| userName | char(8) | NO | MUL | NULL | |
| isApproved | tinyint(4) | NO | | 0 | |
| modifiedTimestamp | int(11) | NO | | NULL | |
| field | char(255) | YES | | NULL | |
| value | text | YES | | NULL | |
+-------------------+------------+------+-----+---------+-------+
> userProgram
+-------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+--------------+------+-----+---------+-------+
| userName | char(8) | NO | PRI | NULL | |
| isApproved | tinyint(4) | NO | PRI | 0 | |
| modifiedTimestamp | int(11) | NO | | NULL | |
| name | varchar(255) | YES | | NULL | |
| address1 | varchar(255) | YES | | NULL | |
| address2 | varchar(255) | YES | | NULL | |
| city | varchar(50) | YES | | NULL | |
| state | char(2) | YES | MUL | NULL | |
| zip | char(10) | YES | | NULL | |
| phone | varchar(25) | YES | | NULL | |
| fax | varchar(25) | YES | | NULL | |
| ehsChildren | int(11) | YES | | NULL | |
| hsChildren | int(11) | YES | | NULL | |
| siteCount | int(11) | YES | | NULL | |
| staffCount | int(11) | YES | | NULL | |
| grantee | varchar(255) | YES | | NULL | |
| programType | varchar(255) | YES | | NULL | |
| additional | text | YES | | NULL | |
+-------------------+--------------+------+-----+---------+-------+
這與jQuery完全無關。已移除標記。 – casablanca 2010-11-17 00:28:28
如果您想學習SQL,使用它的數據庫實現文檔不是很好的文獻。該文檔是爲已經熟悉SQL的人編寫的。所以,你應該找一些學習SQL的文獻來代替。 – Guffa 2010-11-17 00:57:15