Что такое структурированный способ построения запроса MySQL?

Я считаю себя достаточно компетентным в понимании и манипулировании Си-иш языками; Для меня не проблема придумать алгоритм и реализовать его на любом языке Си.

У меня огромные трудности с написанием запросов SQL (в моем конкретном случае MySQL). Для очень простых запросов это не проблема, но для сложных запросов я расстраиваюсь, не зная, с чего начать. Чтение документации MySQL затруднено, главным образом из-за отсутствия описания и объяснения синтаксиса. t организован очень хорошо.

Например, документация SELECT повсюду: она начинается с того, что выглядит как psuedo-BNF, но затем (поскольку текст для сводных описаний не доступен для кликов ... например, select_expr ) он быстро превращается в это разочаровывающее упражнение, пытаясь самостоятельно собрать синтаксис, открыв несколько окон браузера.

Хватит ныть.

Я хотел бы знать, как люди, шаг постепенно приступайте к построению сложного запроса MySQL. Вот конкретный пример. У меня есть три таблицы ниже. Я хочу ВЫБРАТЬ набор строк со следующими характеристиками:

Из таблиц userInfo и userProgram я хочу выбрать userName , одобрено , и поля ModifiedTimestamp и UNION их в один набор. Из этого набора я хочу ЗАКАЗАТЬ с помощью ModifiedTimestamp , взяв MAX (modifiedTimestamp) для каждого пользователя (т.е. должна быть только одна строка с уникальным userName и временная метка, связанная с этим именем пользователя, должны быть как можно более высокими). ​​

Из таблицы user я хочу сопоставить firstName и lastName , который связан с userName , поэтому он выглядит примерно так:

+-----------+----------+----------+-------------------+
| 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    |       |
+-------------------+--------------+------+-----+---------+-------+
7
задан Avery 17 November 2010 в 00:59
поделиться