saluki-dk wrote:
> Hej
>
> Jeg er nybegynder på MySql - og jeg er ved at flytte min dBaseIV
> aplication med 19.000 hunde over i MySql
> Jeg har styr på en del ting - den der med JOIN - den har jeg ikke styr
> på
I så fald vil jeg anbefale en grundbog i SQL. Der findes næsten ikke noget
der er mere basalt for databaser end join.
> (og der er efter min fatige mening IKKE meget hjælp at hente i
> Dokumentationen)
MySQL har ellers nogle udmærkede beskrivelser. Men der er tale om en manual,
ikke en lærebog.
> Jeg har denne simple forespørgsel, med en Bruger ($user), en list over
> hvilkne hunde der er tilgængelig ($tlist)- og så skal jeg "bare" have
> fundet dem, som brugeren har rettighed til - hvor svært kan det lige
> være: ;-(((
>
> $query = "SELECT CONCAT(Tenbase.kennel,' ',Tenbase.navn) AS hundnavn
> FROM Tenbase
> JOIN mklitter ON Tenbase.lnr = mklitter.lnr
> WHERE Tenbase.inr IN (" . $tlist . ")
> and (Tenbase.ejer_nr=$user
> or Tenbase.coejer_nr=$user
> or mklitter.bnr=$user
> or mklitter.cbnr=$user)
> ORDER BY hundnavn";
Be' om: Klip de dele, der ikke er SQL fra. Det andet forvirrer bare
billedet.
> ....giver følgende fejl:
>
> The SELECT would examine more rows than MAX_JOIN_SIZE. Check your
> WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the
> SELECT is ok
> max_join_size er 33.554.432 - (har lige spurgt), Tenbase ~19.000
> records, mklitter ~7.000 og $tlist ~700
Fejlen er at
19000x7000 =~ 140.000.000 > 33.554.432
Betingelserne i den where-klausul er sådan, at MySQL ikke har nogen mulighed
for at tage udgangspunkt i en delmængde af en af de to tabeller inden den
begynder på join'et. Den er derfor nødt til at skabe en midlertidig tabel
med samtlige kombinationer af rækker fra Tenbase og mklitter, dvs. et join
på rundt regnet 140 millioner rækker.
> Det er garanteret min JOIN der ikke virker - men jeg har "lånt" den
> fra en anden funktion hvor den virker.
Nix. Der er så vidt jeg kan se ikke noget principielt galt med din
forespørgsel.
Gør dig selv den tjeneste af lære lidt mere om SQL. Ellers ender du med at
lave det er blevet kaldt "programming by accident": Man prøver sig frem
indtil det virker, men man forstår ikke *hvorfor* det virker.
--
Regards,
Kristian Damm Jensen
"This isn't Jeopardy. Answer below the question."