Avatar billede JJ77 Juniormester
23. april 2006 - 23:23 Der er 10 kommentarer og
1 løsning

fejl når jeg søger i flere tabeller

får en mystisk fejlmeddelelse når jeg skal have nedenstående kode til at søge i flere tabeller.. hvordan løser jeg dette?

fejlmedd.: 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

<?php
require_once("../members/common.php");
//connect til mysql

$query = mysql_query("
SELECT
    u.userEmail,
    s.loebetidForAnnonce,
    s.produkt
FROM
    salgAfProdukt, koebAfProdukt, bytteAfProdukt, bortgivesAfProdukt AS s
INNER JOIN
    userProfile AS u
ON
    u.userId = s.userId
WHERE
    ADDDATE(s.loebetidForAnnonce, INTERVAL -5 DAY) < NOW()
AND
    ADDDATE(s.loebetidForAnnonce, INTERVAL -4 DAY) > NOW()
GROUP BY
    u.userEmail
   
") or die(mysql_error());
Avatar billede codebase Praktikant
23. april 2006 - 23:41 #1
Det er åbenbart fordi din query returnere en søgning i så mange rækker at det er mere en maks. Er sat til i mysql serveren.

MAX_JOIN_SIZE = value | DEFAULT
Don't allow SELECT statements that will probably need to examine more than value row combinations or is likely to do more than value disk seeks. By setting this value, you can catch SELECT statements where keys are not used properly and that would probably take a long time. Setting this to a value other than DEFAULT resets the SQL_BIG_SELECTS value to 0. If you set the SQL_BIG_SELECTS value again, the SQL_MAX_JOIN_SIZE variable will be ignored. You can set a default value for this variable by starting mysqld with the --max_join_size=value option. This variable previously was named SQL_MAX_JOIN_SIZE. Note that if a query result already is in the query cache, no result size check is performed, because the result has already been computed and it will not burden the server to send it to the client.

http://mysqld.active-venture.com/SET_OPTION.html

http://www.google.dk/search?hl=da&q=The+SELECT+would+examine+more+rows+than+MAX_JOIN_SIZE.+default&meta=
Avatar billede erikjacobsen Ekspert
24. april 2006 - 00:23 #2
Du har 4 tabeller, og 1 join-betingelse. Det er sædvanligvis en fejl. 4 tabeller kræver normalt 3 join-betingelser.
Avatar billede erikjacobsen Ekspert
24. april 2006 - 00:24 #3
5 tabeller har du jo... 4 joinbetingelser
Avatar billede erikjacobsen Ekspert
24. april 2006 - 00:26 #4
Det er derfor det går galt med størrelsen. Men vil du nu joine dem allesammen? Navnene "salgAfProdukt, koebAfProdukt, bytteAfProdukt, bortgivesAfProdukt" antyder muligvis en række tabeller med samme struktur. Hvis det er tilfældet mener du måske at du søger i en UNION af disse 4 JOINet med den 5. Kan det passe?

(Og hvis det passer vil jeg da anbefale at plumpe de 4 ind i een og samme tabel, med et ekstra felt, der siger om det er salg, køb, bytte, bortgives - ingen grund til 4 eens tabeller)
Avatar billede codebase Praktikant
24. april 2006 - 01:00 #5
Hvilken falkeblik erik ;)
Avatar billede JJ77 Juniormester
24. april 2006 - 09:40 #6
du har helt ret.. det er faktisk 4 helt ens tabeller :) jeg har også selv haft mange overvejelser om de skulle samles i en ell. hva. Når tabellerne skal vises skal der hentes billeder samt et bynavn fra andre tabeller hvilket ved mange rækker i én tabel kan gøre den en smule langsom, selv om jeg har indexeret dem osv. Det er sådan set derfor jeg har delt det ud i 4.. ved ikke om jeg er dum når jeg gør det sådan ;-), men tænkte at det ville give en lille bitte hurtigere hastighed..
Avatar billede JJ77 Juniormester
24. april 2006 - 09:51 #7
men hvis jeg nu skulle beholde det som det er nu, hvordan fann får jeg det så til at virke? kan nok ikke ændre max_join_size da det er et webhotel hos b-one.. :(
Avatar billede erikjacobsen Ekspert
24. april 2006 - 09:59 #8
Det koster nok mere tid at holde styr på 4 tabeller, end een med et index. Bedste anbefaling at lave det om. Du skal ikke ændre max_join_size. Du ønsker nemlig ikke en join mellem de 4, men som jeg skriver en Union - det bør din mysql understøtte, men du kan da tjekke det.
Avatar billede JJ77 Juniormester
24. april 2006 - 11:22 #9
"jeg lader den lige ligge lidt, den med at samle tabellerne i én.. kræver nemlig en hel del omstrukturering og omkodning"
menn.. hvis jeg så skal lave en union, hvornn fann får jeg gjort dette?
Avatar billede JJ77 Juniormester
24. april 2006 - 11:25 #10
det er meningen at den i stedet for at hente fra kun én tabel, skal hente fra alle 4, på præcis samme måde som den skulle gøre hvis det kun var én tabel og jeg altså fjernede  koebAfProdukt, bytteAfProdukt, bortgivesAfProdukt.... men samtidig kun sende én mail selvom en bruger har annoncer i flere tabeller :)
Avatar billede JJ77 Juniormester
01. maj 2006 - 15:38 #11
.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester