Estructura definición de Joins de tablas
Las Joins (relaciones entre tablas de la base de datos) en quartup tienen una sintaxis muy versátil: compacta pero flexible, y se usa en múltiples sitios de la aplicación. Por ello requieren una explicación detallada:
Formato del constructor de la clase (QU_ColJoin):
QU_ColJoin::__constructor($nameFrom, $titleFrom, $definition, ...) (los otros campos no son relevantes aquí)
$nameFromnombre del 'Join', o nombre del objeto 'QU_ColReal'/'QU_ColLink' que ha generado el 'Join'$definitiondefinición del Join con la siguiente sintaxis:- nombre fichero[ (campoDestino1[={\$campoOrigen1|literal1}] [,...]) ]
- | key [-I]
- [-DEL]
- [-DE2]
- [-DVA]
- [-DV2]
- [ {-R} {-C} {-M} ]
- [ | campo salida 1 [(ancho[-alto])] [, ...] ]
- [ | campo salida event 1 [, ...] ]
- Si falta en nombre del campo 'orígen' se asume el mismo que el campo 'destino', salvo en el último campo de la lista, que (solo en los casos en que el Join lo haya creado un objeto 'Campo') se asume el nombre de dicho campo.
- El campo orígen puede tener la nomenclatura
joinAnterior.nombre(caso de Joins en cascada) - El campo orígen puede tener la nomenclatura
{(expresion-sql)}(caso de expresiones SQL incrustadas) - Si el campo asociado a la Join (QU_ColReal) es SQL, entonces la Join puede tener la nomenclatura
SELF(la propia expresión SQL del campo se incrusta en la Join) - El nombre del campo 'destino' NO debe tener el '$' de comienzo, siempre se considera que es un campo.
- En cambio, el nombre del campo 'orígen' SI necesita el '$' (si es un campo), si no siempre se interpretará como un valor literal. Un caso especial es el literal en mayúsculas 'NUL', si se usa se procesará como un NULL de Sql, y por tanto la condición Sql no será de la forma
field='value'si no de la formafield IS NULL - Si un campo 'orígen' es en mayúsculas, se asume que no es un campo de la tabla, si no un control especial para la tabla. Hay pocos casos que lo usen
- ejemplo:
maescuen(TIP=c,cod_cuenta)|0el 'TIP' es el control -campo virtual-) - Ojo: estos campos en mayúsculas se deben tratar (y 'unset'ear) antes de llamar al constructor de la madre, si no dará error en el QU_Table::addInterval()
- ejemplo:
- El signo '=' se puede sustituir por ':' (así podemos pasar esta notación en la URL).
Ejemplos varios
- ejemplo de una Join sin ver nombre relacionado:
maescuen(cod_cuenta)|0
- ejemplo de una Join viendo nombre relacionado (2 campos de salida):
maescuen(cod_cuenta)|0|nombre,poblacion
- ejemplo de una Join viendo nombre relacionado (2 campos de salida, y 2 campos de evento):
maesarti(nivel:1,cod_articulo)|0|nombre|stock_dis,stock_nod
- ejemplo de una Join con más de un campo de relación:
rosateotel(ot,barra,linea)|0
- ejemplo de un Join con más de un campo de relación y nombres diferentes:
rosaofeb(oferta:$ori_oferta,barra:$ori_barra,linea)|0|descripcion
Ejemplos (con la codificación interna, en PHP) de como el Join afecta a los parámetros de envío al script de relación:
| EditRelation | Ej. clásico | Ej. id + 1 cód.ext. | Ej. id + 4 cód.ext. |
| Join def.(cod_arti_ori) | Join def.(id_arti_ori) | Join def.(id_vecabe_ori) | |
| maesarti(cod_articulo) |0| nombre(30),cod_familia(5) | maesarti(id_arti) |0-I| nombre(30),cod_familia(5) | cialdoco(id_vecabe) |0-I| referencia | |
| file | cialdocolin | cialdocolin | cialdocolin |
| fileJoin | maesarti | maesarti | cialdoco |
| keyJoin | 0 | 0 | 0 |
| lastFieldJoin | cod_articulo | id_arti | id_vecabe |
| eventField | cod_arti_oriQ1 | Rid_arti_ori_cod_articuloQ1 | Rid_vecabe_ori_*Q1 |
| --- | BOQUI07 | BOQUI07 | BOQUI07 |
| nameFromJoin | cod_arti_oriQ1 | id_arti_oriQ1 | id_vecabe_oriQ1 |
| codeFieldJoin | blanco | cod_articulo | soporte,canal, cod_serie,numero |
| outFieldJoin | cod_familia,nombre | cod_familia,nombre | referencia |