Выдуманный упрощенный пример (пример чуть похож на http://sqlinfo.ru/forum/viewtopic.php?id=3259):
tableA - fields: ida (INT) и еще больше 30 шт. (среди них INT, DATETIME, VARCHAR (!!!), ENUM);
tableB - fields: idb (INT) и еще больше 30 шт. (tableA -> tableB - один ко многим (причем одной записи с tableA соответствует много записей (строк) с tableB (от одной до бесконечности)));
tableC - fields: idc (INT) и еще 3шт. (tableB -> tableC - аналогично);
tableD - fields: idd (INT) и еще 3шт. (tableC -> tableD - аналогично).
Все таблицы типа MyISAM.
Выполняется немножко сокращен запрос (так как используются еще вкладываемые запросы (там где одному запросу всегда соответствует единственная запись из другой таблицы)):
SELECT *
FROM tableA AS a
LEFT JOIN tableB AS b ON a.ida=b.id_a
LEFT JOIN tableC AS c ON b.idb=c.id_b
LEFT JOIN tableD AS d ON c.idc=d.id_c
WHERE a.field<1 AND b.field<2 AND b.field>3 AND b.field LIKE '%test%'
ORDER BY ...;
Пример-результат:
ida|...|<--~30шт.-->|...| idb|...|<--~30шт.-->|...|idc|...|<--~3шт.-->|...|idd|...|<--~3шт.-->|...|
123|...|<--~30шт.-->|...|3000|...|<--~30шт.-->|...| 1|...|<--~3шт.-->|...|346|...|<--~3шт.-->|...|
123|...|<--~30шт.-->|...|3000|...|<--~30шт.-->|...| 1|...|<--~3шт.-->|...|347|...|<--~3шт.-->|...|
123|...|<--~30шт.-->|...|3000|...|<--~30шт.-->|...| 1|...|<--~3шт.-->|...|348|...|<--~3шт.-->|...|
123|...|<--~30шт.-->|...|3000|...|<--~30шт.-->|...| 1|...|<--~3шт.-->|...|349|...|<--~3шт.-->|...|
123|...|<--~30шт.-->|...|3000|...|<--~30шт.-->|...| 10|...|<--~3шт.-->|...|433|...|<--~3шт.-->|...|
123|...|<--~30шт.-->|...|3000|...|<--~30шт.-->|...| 10|...|<--~3шт.-->|...|434|...|<--~3шт.-->|...|
123|...|<--~30шт.-->|...|3000|...|<--~30шт.-->|...| 10|...|<--~3шт.-->|...|435|...|<--~3шт.-->|...|
123|...|<--~30шт.-->|...|3000|...|<--~30шт.-->|...| 10|...|<--~3шт.-->|...|436|...|<--~3шт.-->|...|
123|...|<--~30шт.-->|...|4000|...|<--~30шт.-->|...| 5|...|<--~3шт.-->|...|636|...|<--~3шт.-->|...|
123|...|<--~30шт.-->|...|4000|...|<--~30шт.-->|...| 5|...|<--~3шт.-->|...|637|...|<--~3шт.-->|...|
123|...|<--~30шт.-->|...|4000|...|<--~30шт.-->|...| 5|...|<--~3шт.-->|...|638|...|<--~3шт.-->|...|
123|...|<--~30шт.-->|...|4000|...|<--~30шт.-->|...| 5|...|<--~3шт.-->|...|993|...|<--~3шт.-->|...|
123|...|<--~30шт.-->|...|4000|...|<--~30шт.-->|...| 5|...|<--~3шт.-->|...|994|...|<--~3шт.-->|...|
999|...|<--~30шт.-->|...|5003|...|<--~30шт.-->|...| 8|...|<--~3шт.-->|...| 96|...|<--~3шт.-->|...|
999|...|<--~30шт.-->|...|5003|...|<--~30шт.-->|...| 8|...|<--~3шт.-->|...| 97|...|<--~3шт.-->|...|
999|...|<--~30шт.-->|...|5003|...|<--~30шт.-->|...| 8|...|<--~3шт.-->|...| 98|...|<--~3шт.-->|...|
999|...|<--~30шт.-->|...|5003|...|<--~30шт.-->|...| 8|...|<--~3шт.-->|...| 99|...|<--~3шт.-->|...|
999|...|<--~30шт.-->|...|5003|...|<--~30шт.-->|...| 8|...|<--~3шт.-->|...|100|...|<--~3шт.-->|...|
1) А хочется получить:
ida|...|<--~30шт.-->|...|nab| idb|...|<-30шт.->|...|nbc|idc|...|<-3шт.->|...|ncd|idd|...|<-3шт.->|...|
123|...|<--~30шт.-->|...| 2|3000|...|<-30шт.->|...| 2| 1|...|<-3шт.->|...| 4|346|...|<-3шт.->|...|
123|...|<--~30шт.-->|...| 2|3000|...|<-30шт.->|...| 2| 1|...|<-3шт.->|...| 4|347|...|<-3шт.->|...|
123|...|<--~30шт.-->|...| 2|3000|...|<-30шт.->|...| 2| 1|...|<-3шт.->|...| 4|348|...|<-3шт.->|...|
123|...|<--~30шт.-->|...| 2|3000|...|<-30шт.->|...| 2| 1|...|<-3шт.->|...| 4|349|...|<-3шт.->|...|
123|...|<--~30шт.-->|...| 2|3000|...|<-30шт.->|...| 2| 10|...|<-3шт.->|...| 4|433|...|<-3шт.->|...|
123|...|<--~30шт.-->|...| 2|3000|...|<-30шт.->|...| 2| 10|...|<-3шт.->|...| 4|434|...|<-3шт.->|...|
123|...|<--~30шт.-->|...| 2|3000|...|<-30шт.->|...| 2| 10|...|<-3шт.->|...| 4|435|...|<-3шт.->|...|
123|...|<--~30шт.-->|...| 2|3000|...|<-30шт.->|...| 2| 10|...|<-3шт.->|...| 4|436|...|<-3шт.->|...|
123|...|<--~30шт.-->|...| 2|4000|...|<-30шт.->|...| 1| 6|...|<-3шт.->|...| 5|636|...|<-3шт.->|...|
123|...|<--~30шт.-->|...| 2|4000|...|<-30шт.->|...| 1| 6|...|<-3шт.->|...| 5|637|...|<-3шт.->|...|
123|...|<--~30шт.-->|...| 2|4000|...|<-30шт.->|...| 1| 6|...|<-3шт.->|...| 5|638|...|<-3шт.->|...|
123|...|<--~30шт.-->|...| 2|4000|...|<-30шт.->|...| 1| 6|...|<-3шт.->|...| 5|993|...|<-3шт.->|...|
123|...|<--~30шт.-->|...| 2|4000|...|<-30шт.->|...| 1| 6|...|<-3шт.->|...| 5|994|...|<-3шт.->|...|
999|...|<--~30шт.-->|...| 1|5003|...|<-30шт.->|...| 1| 8|...|<-3шт.->|...| 5| 96|...|<-3шт.->|...|
999|...|<--~30шт.-->|...| 1|5003|...|<-30шт.->|...| 1| 8|...|<-3шт.->|...| 5| 97|...|<-3шт.->|...|
999|...|<--~30шт.-->|...| 1|5003|...|<-30шт.->|...| 1| 8|...|<-3шт.->|...| 5| 98|...|<-3шт.->|...|
999|...|<--~30шт.-->|...| 1|5003|...|<-30шт.->|...| 1| 8|...|<-3шт.->|...| 5| 99|...|<-3шт.->|...|
999|...|<--~30шт.-->|...| 1|5003|...|<-30шт.->|...| 1| 8|...|<-3шт.->|...| 5|100|...|<-3шт.->|...|
Тоисть расставить числа nab (одна запись с tableA сколько связывает запесей с tableB), nbc(аналогично), ncd (аналогично). Однако за счет этих чисел растет избыточность данных (но не значительно).
2) Но наверно не реально сделать JOIN и при этом расставить числа (nab, nbc, ncd). Тогда надо дополнительный запрос с результатом:
ida|nab| idb|nbc|idc|ncd
123| 2|3000| 2| 1| 4
123| 2|3000| 2| 10| 4
123| 2|4000| 1| 6| 5
999| 1|5003| 1| 8| 5
Но тогда будет тяжело наложыть две таблицы при выводе данных (конечною таблицу с результатом и таблицу с числами) чтобы конечный результат был без избыточности данных и нужен дополнительный запрос, а при большых таблицах это критично.
А тепер представте как все усложняется и геометрически растет избыточность если использовать еще tableE, tableF ... Это трудно представить, но алгоритм один и тот же.
Много усилий нужно для описания задачи, но еще больше для ее решения. Но на форуме действительно профессиональные ответы. Заранее спасибо.