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.
Annonceindlæg tema
Forsvar & beredskab
Cybersikkerhed, realtidsdata og robuste it-systemer er blevet fundamentet for moderne forsvar.
24. februar 2004 - 23:01
#1
SELECT DISTINCT Items.* FROM Items JOIN Sizes ON Items.ID=Sizes.ItemID WHERE Sizes.OnStock > 0 måske
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
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
25. februar 2004 - 09:20
#4
Den fejler ikke, men når jeg kører den i PhP Admin vises intet. Siden reloader bare.
25. februar 2004 - 10:52
#5
Mystisk. Der er data som opfylder kriterie ? Og det er ikke en eller anden banal slag fejl ?
25. februar 2004 - 12:22
#6
Ja der er data. Det er ikke fordi at en varer har flere linier i sizes ?
25. februar 2004 - 12:46
#7
Nej. join skulle give flere linier og distinct skulle fjerne duplikaterne igen.
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
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 :)
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) ?
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
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 :)
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
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.
26. februar 2004 - 12:00
#15
Og et svar
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 :)
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 ...
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
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
26. februar 2004 - 16:02
#20
Du er genial. hvad skulle eksperten(og jeg) gøre uden dig. Du fortjener en stor øl :)
Computerworld tilbyder specialiserede kurser i database-management