Tôi coi mình khá giỏi trong việc hiểu và thao tác ngôn ngữ C-ish; nó không phải là một vấn đề đối với tôi để đưa ra một thuật toán và thực hiện nó trong bất kỳ ngôn ngữ C-ish.Cách cấu trúc để xây dựng một truy vấn MySQL là gì?
Tôi gặp khó khăn to lớn khi viết các truy vấn SQL (trong trường hợp cụ thể của tôi, MySQL). Đối với các truy vấn rất đơn giản, nó không phải là một vấn đề, nhưng đối với các truy vấn phức tạp, tôi trở nên thất vọng không biết bắt đầu từ đâu. Việc đọc tài liệu MySQL là khó khăn, chủ yếu là do mô tả cú pháp và giải thích không được tổ chức rất tốt.
Ví dụ, tài liệu SELECT
là tất cả trên bản đồ: nó bắt đầu với những gì trông giống như psuedo-BNF, nhưng sau đó (vì văn bản cho mô tả tổng hợp không thể nhấp ... như select_expr
) bài tập bực bội này khi cố gắng tự xâu cú pháp bằng cách mở một số cửa sổ trình duyệt.
Đủ can đảm.
Tôi muốn biết mọi người, từng bước, bắt đầu xây dựng một truy vấn MySQL phức tạp như thế nào. Đây là một ví dụ cụ thể. Tôi có ba bảng dưới đây. Tôi muốn SELECT
một tập hợp các hàng với các đặc điểm sau:
Từ bảng userInfo
và userProgram
, tôi muốn chọn userName
, isApproved
, và modifiedTimestamp
lĩnh vực và UNION
chúng thành một bộ. Từ tập này, tôi muốn ORDER
bằng cách modifiedTimestamp
lấy MAX(modifiedTimestamp)
cho mọi người dùng (nghĩa là chỉ nên có một hàng có userName
và dấu thời gian được liên kết với tên người dùng đó càng cao càng tốt).
Từ bảng user
, tôi muốn để phù hợp với firstName
và lastName
được liên kết với các userName
để nó trông giống như sau:
+-----------+----------+----------+-------------------+
| 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 |
+-----------+----------+----------+-------------------+
Gần nhất tôi nhận được là một truy vấn mà trông giống như này:
(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;
Tôi cảm thấy mình khá thân thiết nhưng tôi không biết phải đi đâu từ đây hoặc ngay cả khi tôi đang nghĩ về điều này đúng cách.
> 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 | |
+-------------------+--------------+------+-----+---------+-------+
Điều này hoàn toàn không liên quan đến jQuery. Đã xóa thẻ. – casablanca
Nếu bạn muốn tìm hiểu SQL, tài liệu của việc thực hiện một cơ sở dữ liệu bằng cách sử dụng nó không phải là tài liệu tốt. Tài liệu này được viết cho người đã biết SQL một cách hợp lý. Vì vậy, bạn nên tìm một số tài liệu để học SQL thay thế. – Guffa