У меня MySQL таких таблиц:
MainTable
- с идентификатором столбца, именем, включено IntermediateTable1
- с идентификатором столбца, MainTable_FK, TableA_FK IntermediateTable2
- с идентификатором столбца, MainTable_FK, TableB_FK IntermediateTable3
- с идентификатором столбца, MainTable_FK, TableC_FK TableA
- с идентификатором столбца, именем TableB
- с идентификатором столбца, именем TableC
- с идентификатором столбца, именем
Основная цель - SELECT
все enabled
Форма данных MainTable
объединяется с этими 3 промежуточными таблицами и Table
A, B и C, и сортируется по столбцу name
в TableC
. Данные должны быть извлечены с 20 строками.
Я пробовал так:
SELECT *
FROM MainTable
LEFT JOIN IntermediateTable1 ON MainTable.id = IntermediateTable1.MainTable_FK
LEFT JOIN IntermediateTable2 ON MainTable.id = IntermediateTable2.MainTable_FK
LEFT JOIN IntermediateTable3 ON MainTable.id = IntermediateTable3.MainTable_FK
LEFT JOIN TableA ON IntermediateTable1.TableA_FK = TableA.id
LEFT JOIN TableB ON IntermediateTable2.TableB_FK = TableB.id
LEFT JOIN TableC ON IntermediateTable3.TableC_id = TableC.id
WHERE (MainTable.enabled <> 0)
GROUP BY MainTable.id
ORDER BY TableC.name DESC LIMIT 0, 20;
и:
SELECT DISTINCT *
FROM MainTable
LEFT JOIN IntermediateTable1 ON MainTable.id = IntermediateTable1.MainTable_FK
LEFT JOIN IntermediateTable2 ON MainTable.id = IntermediateTable2.MainTable_FK
LEFT JOIN IntermediateTable3 ON MainTable.id = IntermediateTable3.MainTable_FK
LEFT JOIN TableA ON IntermediateTable1.TableA_FK = TableA.id
LEFT JOIN TableB ON IntermediateTable2.TableB_FK = TableB.id
LEFT JOIN TableC ON IntermediateTable3.TableC_id = TableC.id
WHERE (MainTable.enabled <> 0)
ORDER BY TableC.name DESC LIMIT 0, 20;
, но это не работает должным образом.
Как рассчитать индекс строки как одну строку, если MainTable.id=1
имеет два или более TableC.name
s в результате?