Por lo que sé mysql GROUP BY grupos para el último registro encontrado.GRUPO POR devolver el primer registro
¿Hay alguna solución para GROUP BY en el primer registro?
He configurado el comando ORDER en SQL y necesito GROUP BY devolver el primer registro y no el último.
EDITAR
Ésta es la consulta
SELECT
DISTINCT(master.masterID),
langData.*,
master.*
FROM master_table as master
INNER JOIN lang_table as langData ON
langData.masterID=master.masterID
GROUP BY master.masterID
ORDER BY
CASE
WHEN langData.lang='currentLang' THEN 1 ELSE 999 END ,
master.name desc LIMIT 0,10
La consulta anterior seleccionar el masterID
para la tabla de idiomas múltiples y supongamos que volver PRIMEROS los registros en currentLang
y ordenarlas por nombre y luego todos los demás idiomas.
No me preguntes por qué no configuro el idioma en UNIR. Este es el camino a seguir.
Así que todo funciona bien hasta ahora, espere el escenario que tengo un registro con los idiomas en
y fr
. Si es currentLang
en
continuación, basado en
langData.lang='currentLang' THEN 1 ELSE 999 END
el orden en
es 1 y fr
orden es 999 y en lugar de obtener el valor de en
consigo el valor de fr
.
Es por eso que quiero agrupar en la primera fila.
que no le pedirá que ¿por qué no se establece el idioma en el 'JOIN' , más bien te diré que de esta manera no funcionará. Una expresión no agregada en 'GROUP BY 'devuelve un registro arbitrario de cada grupo y no debe usarse si los valores varían. Puede devolver cualquier registro de 'tabla_maestro' (todos serán iguales dentro de cada grupo) pero no de' lang_table'. No hay garantía sobre qué registro se devolverá, nada, niente. 'Por cierto', ¿por qué tienes 'DISTINCT' aquí, cuál es su propósito? – Quassnoi
Estoy tratando de lograr "darme primero todos los registros de la orden de idioma actual por nombre y luego para todos los demás idiomas ordenar por nombre" Significado: si lang actual es EN, obtenga todos los registros de EN y luego obtenga todos los registros de otras lenguas. SI en la tabla lang para un registro tiene EN, FR devuelve el valor EN.IF en la tabla lang EN no existe, devuelva cualquier otra lang – ntan
esto es muy fácil de hacer con un 'JOIN' como se describe aquí: http: // explainextended. com/2009/08/10/fallback-language-names-mysql/pero por alguna extraña razón (que ni siquiera quiere que le pidan) es reacio a usarlo. – Quassnoi