Avatar billede falslev Nybegynder
24. februar 2004 - 20:06 Der er 19 kommentarer og
1 løsning

Hjælp til forsp. med joins

Jeg har 2 databaser.
1. Items (ID,Pris)
2. Sizes (ItemID,Str,OnStock)

Mit ønske er en forspørgsel som kun viser de varer fra Items hvor OnStock i databasen Sizes er > 0.

Husk at da der godt kan være flere str. på en vare og dermed flere OnStock tal.
Avatar billede arne_v Ekspert
24. februar 2004 - 23:01 #1
SELECT DISTINCT Items.* FROM Items JOIN Sizes ON Items.ID=Sizes.ItemID
WHERE Sizes.OnStock > 0

måske
Avatar billede falslev Nybegynder
24. februar 2004 - 23:35 #2
Den siger desværre:

MySQL returnerede:


You have an error in your SQL syntax near 'ON Items.ID = Sizes.ItemID WHERE Sizes.OnStock > 0 LIMIT 0, 30' at line 1
Avatar billede arne_v Ekspert
24. februar 2004 - 23:39 #3
Det forstår jeg ikke helt.

Hvad med uden JOIN:

SELECT DISTINCT Items.* FROM Items,Sizes
WHERE Items.ID=Sizes.ItemID AND Sizes.OnStock > 0
Avatar billede falslev Nybegynder
25. februar 2004 - 09:20 #4
Den fejler ikke, men når jeg kører den i PhP Admin vises intet.
Siden reloader bare.
Avatar billede arne_v Ekspert
25. februar 2004 - 10:52 #5
Mystisk.

Der er data som opfylder kriterie ?

Og det er ikke en eller anden banal slag fejl ?
Avatar billede falslev Nybegynder
25. februar 2004 - 12:22 #6
Ja der er data.
Det er ikke fordi at en varer har flere linier i sizes ?
Avatar billede arne_v Ekspert
25. februar 2004 - 12:46 #7
Nej. join skulle give flere linier og distinct skulle fjerne duplikaterne
igen.
Avatar billede falslev Nybegynder
25. februar 2004 - 15:20 #8
Skal ikke kunne sige hvorfor dine ikke virkede, men har fået denne til at virke:

SELECT Items.* FROM Items INNER JOIN Sizes ON Items.id=Sizes.ItemID WHERE Items.Active=1 GROUP BY Items.ID HAVING sum(Sizes.OnStock)>0
Avatar billede falslev Nybegynder
25. februar 2004 - 15:27 #9
Nu har jeg for sjovt skyld lige prøvet at sætte din forsp. ind i mit asp script og her virker det perfekt. Men i PhpAdmin sker der intet ???

Hvilket forsp. er så bedst?
Hvordan tilpasses de: SELECT COUNT(Items.ID) ??

Lover at jeg ikke har flere spørgsmål :)
Avatar billede arne_v Ekspert
25. februar 2004 - 17:16 #10
Jeg kan ikke forklare PHPMyAdmin's adfærd.

Umiddelbart synes jeg at min er simplere. Men jeg er jo biased.

Hvad mener du med tilpasses SELECT COUNT(Items.ID) ?
Avatar billede falslev Nybegynder
26. februar 2004 - 09:46 #11
Det skal bruges til paging så jeg skal derfor også bruge en der bare tæller hvor mange varer der vises
Avatar billede falslev Nybegynder
26. februar 2004 - 11:35 #12
Ved godt det ikke var hvad spørgsmålet gik på, men ville blive rigtig glad såfremt du gad hjælpe :)
Avatar billede arne_v Ekspert
26. februar 2004 - 11:59 #13
Hvis du skal lave paging så vil jeg foreslå at du:
  - bruger LIMIT til at hente f.eks. 20 ad gangen
  - vise det faktiske antal nederst på skærmen og så lade din
    applikation tælle op
Avatar billede arne_v Ekspert
26. februar 2004 - 12:00 #14
Og hvis jeg sommetider er lidt længe om at svare, så er det ikke nødvendigvis
fordi at jeg ikke vil.

Men jeg har ikke altid lige meget tid til Eksperten.
Avatar billede arne_v Ekspert
26. februar 2004 - 12:00 #15
Og et svar
Avatar billede falslev Nybegynder
26. februar 2004 - 15:33 #16
Det var nok ikke myntet på din svar tid. Mere pgq. af at jeg fik dårlig samvittighed.

Har min paging del klar. Mangler bare at dit script også kan tælle antal varer den viser :)
Avatar billede arne_v Ekspert
26. februar 2004 - 15:41 #17
Umiddelbart tror jeg at det er bedst at tælle i applikationen.

Men du kan altid finde antal i:

SELECT ... FROM ... WHERE ...

med:

SELECT COUNT(*) FROM ... WHERE ...

altså samme query men bare hvor man tæller i.s.f. at returnere rækker.

Muligvis vil du også kunne bruge:

SELECT COUNT(*),... FROM ... WHERE ...
Avatar billede falslev Nybegynder
26. februar 2004 - 15:47 #18
Har prøvet dette men det virker ikke:
SELECT DISTINCT COUNT(Sizes.ID) AS records FROM Items,Sizes WHERE Items.Active=1 AND Items.ID=Sizes.ItemID AND Sizes.OnStock>0
Avatar billede arne_v Ekspert
26. februar 2004 - 16:00 #19
Prøv:

SELECT COUNT(DISTINCT Sizes.ID) AS records FROM Items,Sizes WHERE Items.Active=1 AND Items.ID=Sizes.ItemID AND Sizes.OnStock>0
Avatar billede falslev Nybegynder
26. februar 2004 - 16:02 #20
Du er genial.
hvad skulle eksperten(og jeg) gøre uden dig.
Du fortjener en stor øl :)
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