Я считаю себя достаточно компетентным в понимании и управлении C-иш-языками; для меня не проблема придумать алгоритм и реализовать его на любом языке C-ish.Что такое структурированный способ построения запроса MySQL?
У меня огромная сложность при написании запросов SQL (в моем конкретном случае, MySQL). Для очень простых запросов это не проблема, но для сложных запросов я расстраиваюсь, не зная, с чего начать. Чтение документации MySQL затруднено, главным образом потому, что описание и объяснение синтаксиса не организованы очень хорошо.
Например, документация SELECT
все по карте: она начинается с того, что выглядит как псевдо-BNF, но потом (так как текст для агрегированных описаний не кликабельны ... как select_expr
) он быстро переходит в это разочаровывающее упражнение в попытке собрать синтаксис вместе, открыв несколько окон браузера.
Достаточно скулить.
Хотелось бы узнать, как люди шаг за шагом начинают строить сложный запрос MySQL. Вот пример. У меня три таблицы ниже. Я хочу SELECT
набор строк со следующими характеристиками:
Из таблиц userInfo
и userProgram
, я хочу, чтобы выбрать userName
, isApproved
и modifiedTimestamp
полей и UNION
их в один набор. Из этого набора я хочу, чтобы ORDER
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 | |
+-------------------+--------------+------+-----+---------+-------+
Это абсолютно не связано с jQuery. Удаленный тег. – casablanca
Если вы хотите изучить SQL, документация по реализации базы данных, использующая ее, не является хорошей литературой. Документация написана для тех, кто уже хорошо знает SQL. Итак, вы должны найти некоторую литературу для изучения SQL. – Guffa