我认为自己在理解和操作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