yo,
ich beziehe mich unter anderem auf deine aussagen weiter unten. aber zuerst stellt sich die fragen, ob es den ein outer join sein muss oder ob nicht jedes buch auch immer mindestens ein kapitel hat. somit wäre eine inner join die richtige wahl.
was das problem mit den zählen angeht, so sollte es in einer querry gehen. was du brauchst ist die aggregatfunktion COUNT(), ein DISTINCT über spalten der buchtabelle, die funktion instr und den IF Operator zur verzweigung.
ich bin gerade auf den sprung zur arbeit, habe also wenig zeit. ich gebe deswegen nur mal das grundprinzip an:
In den 25 Büchern
COUNT(DISTINCT buchname)
wurden insgesamt 75 Kapitel gefunden.
COUNT(*)
23 der Kapiteldatensätze enthalten einen Wert beim feld XYZ,
COUNT(IF(INSTR(xyz, 'wert'),1,0))
17 einen beim feld ZYX usw...
COUNT(IF(INSTR(zyx, 'wert'),1,0))
so, muss nun schnell zur arbeit.....
Ilja