Me considero bastante competente para comprender y manipular los lenguajes C-ish; no es un problema para mí encontrar un algoritmo e implementarlo en cualquier lenguaje C-ish.¿Qué es una forma estructurada de construir una consulta MySQL?
Tengo una tremenda dificultad para escribir consultas SQL (en mi caso específico, MySQL). Para consultas muy simples, no es un problema, pero para consultas complejas, me siento frustrado sin saber por dónde empezar. Leer la documentación de MySQL es difícil, principalmente porque la descripción de la sintaxis y la explicación no están muy bien organizadas.
Por ejemplo, la documentación SELECT
es todo el mapa: se comienza con lo que parece ser pseudo-BNF, pero luego (ya que el texto para las descripciones de agregados se puede hacer clic ... como select_expr
) que rápidamente se convirtiera en este frustrante ejercicio de tratar de sintetizar la sintaxis usted mismo al tener abiertas varias ventanas del navegador.
Suficiente lloriqueo.
Me gustaría saber cómo la gente, paso a paso, comienza a construir una consulta compleja de MySQL. Aquí hay un ejemplo específico. Tengo tres tablas a continuación. Quiero SELECT
un conjunto de filas con las siguientes características:
De los userInfo
y userProgram
mesas, quiero seleccionar los userName
, isApproved
y modifiedTimestamp
campos y UNION
en un solo conjunto. Desde este conjunto quiero ORDER
por modifiedTimestamp
tomando el MAX(modifiedTimestamp)
por cada usuario (es decir, debería haber solo una fila con un único userName
y la marca de tiempo asociada con ese nombre de usuario debería ser lo más alta posible).
De la tabla user
, quiero coincidir con el firstName
y lastName
que se asocia con la userName
para que se vea algo como esto:
+-----------+----------+----------+-------------------+
| 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 |
+-----------+----------+----------+-------------------+
Lo más cerca que lo que tengo es una consulta que se parece esto:
(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;
siento que estoy bastante cerca, pero no sé a dónde ir desde aquí o incluso si estoy pensando en esto de la manera correcta.
> 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 | |
+-------------------+--------------+------+-----+---------+-------+
Esto no tiene ninguna relación con jQuery. Etiqueta eliminada – casablanca
Si desea aprender SQL, la documentación de una implementación de una base de datos que la utiliza no es buena literatura. La documentación está escrita para alguien que ya conoce SQL razonablemente bien. Por lo tanto, debería encontrar algo de literatura para aprender SQL en su lugar. – Guffa