Avatar billede hrole Mester
18. august 2021 - 13:12 Der er 11 kommentarer og
1 løsning

Problemer med JOIN

Hej,

Jeg har følgende tre tabeller:
acp: s_id, tlf_1, tlf_2, tlf_3, change_stamp
ac: s_id, id
acs: s_id, navn, adresse

Disse tre tabeller skal kombineres og vise posterne med nyeste change_stamp ved søgning på navn. Har forsøgt:

            SELECT * FROM acp
            JOIN acs ON acp.s_id = acs.s_id
            JOIN ac ON acp.s_id = ac.s_id
            WHERE navn LIKE '%".$_POST['navn']."%' AND (SELECT MAX(change_stamp) FROM acp)

Fejl: #1104 - SELECT ville undersøge for mange poster og ville sandsynligvis tage meget lang tid. Undersøg WHERE delen og brug SET SQL_BIG_SELECTS=1 hvis udtrykket er korrekt

Fjerner jeg JOIN ac ON acp.s_id = ac.s_id løber forespørgslen normalt.
Avatar billede Rune1983 Ekspert
18. august 2021 - 13:48 #1
Mangler du ikke noget til den sidste del?
AND (SELECT MAX(change_stamp) FROM acp)
Avatar billede hrole Mester
18. august 2021 - 14:08 #2
@Rune1983: Det kan jeg ikke lige se?
Avatar billede acore Ekspert
18. august 2021 - 16:37 #3
Enig med Rune. "(SELECT MAX(change_stamp) FROM acp)" vil evaluere til TRUE medmindre change_stamp er 0, og er derfor ligegyldig.

Mener du ikke noget i stil med

AND acp.change_stamp = (SELECT MAX(change_stamp) FROM acp)
Avatar billede hrole Mester
18. august 2021 - 18:33 #4
@acore: Det giver samme fejlmelding
Avatar billede hrole Mester
18. august 2021 - 18:34 #5
SELECT * FROM acp
            JOIN acs ON acp.s_id = acs.s_id
            JOIN ac ON acp.s_id = ac.s_id

giver også samme fejlmelding.

Kan det skyldes at jeg benytter s_id i alle tre tabeller?
Avatar billede arne_v Ekspert
18. august 2021 - 21:46 #6
Er der index på de felter der joines på?
Avatar billede arne_v Ekspert
18. august 2021 - 21:46 #7
Hvad returnerer:

SELECT COUNT(*) FROM acp
            JOIN acs ON acp.s_id = acs.s_id
            JOIN ac ON acp.s_id = ac.s_id

?
Avatar billede hrole Mester
18. august 2021 - 22:37 #8
@arne_v: der er ikke index og fejlmeddelelsen er fortsat: #1104 - SELECT ville undersøge for mange poster og ville sandsynligvis tage meget lang tid. Undersøg WHERE delen og brug SET SQL_BIG_SELECTS=1 hvis udtrykket er korrekt
Avatar billede hrole Mester
19. august 2021 - 17:02 #9
@arne_v: Der var ikke index på - og det var løsningen. Tak!
Avatar billede arne_v Ekspert
20. august 2021 - 15:28 #10
Logikken er at "SELECT ville undersøge for mange poster og ville sandsynligvis tage meget lang tid." jo tydeligt siger at MySQL er bekymret for at SELECT vil tage for lang tid - og introduktion af passende index gør SELECT hurtigere potentielt nedda meget hurtigere.
Avatar billede arne_v Ekspert
20. august 2021 - 15:31 #11
Avatar billede Morten Professor
17. oktober 2021 - 10:22 #12
Hej Arne

Der er index på kan jeg se i databasen

På dem der kan være index på.
har også testet hvilken.
Hvad kan man så gøre har du nogle ideer?

Med venlig hilsen
Morten
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

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