Hjælp til udtræk fra SQL database?

Tags:    php mysql

Jeg er igang med et lagerstyringssystem, og skal i den forbindelse danne en række PDF dokumenter.

Det der volder mig problemer, er følgende:

Jeg har 2 SQL tabeller, hvor den ene hedder "Produkter" og den anden hedder "Tilbud".
Tabellen "Tilbud", indeholder et antal rækker, der refererer med et ID til produkterne i tabellen "Produkter".

F.eks. kunne det være tilbud 1 i tabellen "Tilbud", der har følgende rækker i tabellen:

ProduktID1 = 240
ProduktID2 = 255
ProduktID3 = 289

I tabellen "Produkter" er der så følgende rækker:

ID = 240 - NAVN = Meyer M1D LineArray
ID = 255 - NAVN = Rocknet 300
ID = 289 - NAVN = Galileo 408

Jeg skal derfor ha' lavet et løkke, der læser samtlige produktrækker i 'Tilbud' tabellen, ud fra ID'et henter navnet i 'Produkt' tabellen, og til sidst skriver dette i PDF filen. Jeg benytter FPDF.

Jeg er gået lidt kold i hvordan jeg kommer videre, forhåbentlig er der nogle kloge hoveder der har et tip :-)

Tak.



6 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 1 karma
Sorter efter stemmer Sorter efter dato
Hej Mikkel.

Jeg vil vende tilbage i morgen, da jeg blot lige ligger og kigger igennem på Udvikleren.dk

Men jeg vil dog sige at din(e) tabeller i den grad trænger til en optimering. Det kan nemlig gå hen og bliv halv problematisk at skulle lave en join på dine tabeller, da den så vil skulle sammenligne 20 gange.

Du skal kigge på det der hedde relationel database teori. Se evt på dette link



Hej Mikkel.

For bedre at kunne hjælpe dig er vi nød til at have noget mere information om dine tabeller, da det du søger er en join forbindelse, hvorfra du så kan trække det hele ude som variabler og dermed sætte det ind i FPDF.

Så vi skal altså bruge feltnavne for tabellerne Tilbud og Produkter



Vil umiddelbart mene der er to måder at angribe problemet på:

1. PHP (kan blive lidt rodet)
2. Mysql JOIN

Den første løsning går i korte træk ud på, at du først henter indholdet af tilbudstabellen, kører et loop igennem alle de fundne rækker og henter et tilsvarende produkt for hver række. Dette kan du så pushe til et array og bruge det hele bagefter. Det er i sig selv rimeligt simpelt at lave, men hvis du nu har 200 tilbud skal du foretage 201 forespørgsler til databasen, hvilket i dette tilfælde kan være overflødigt.

Den anden løsning går ud på at du bruger MySql's JOIN til at "sætte de to tabeller sammen". Nu er det noget tid siden jeg har brugt den, så vil ikke rode mig ud i en længere forklaring her, men du kan læse mere om det her: http://dev.mysql.com/doc/refman/5.0/en/join.html
Fordelen her er, at du kun skal foretage ét kald til databasen uanset hvor mange tilbud du har, modsat den første løsning hvor du skal foretage en forespørgsel for hvert enkelt tilbud.

Håber det hjælper ;-)



Hej Daniel.

Tabellen 'Tilbud' har felterne 'ID', og felterne 'Produkt1', 'Produkt2', til og med 'Produkt20'. Disse felter indeholder ID'et til tabellen 'Produkter', som indeholder felterne 'ID' og 'Navn'.

Håber det er det du skal bruge?





Det er knap så optimal måde, du har opbygget din database struktur på. Du kan dog sagtens løse det, men en tabel der referer til optil 20 instanser af en anden tabel, virker bare lidt øv.

Jeg vil anbefale, at lave tabellen om til noget i denne retning:

Fold kodeboks ind/udSQL kode 



Hvis tilbud indeholder mere info, eller der er planer om det, kan du udvide med endnu en tabel, der referer til tilbuds_id

Fold kodeboks ind/udSQL kode 


SQL der burde kunne håndtere ærterne, hvis du vælger at ændre strukturen.
Fold kodeboks ind/udSQL kode 










Hej Stefan.

Nu er jeg rimelig ny i det her, og har lidt svært ved at finde ud af hvad du mener :-) Så måske du kan skære det ud i pap? Jeg har vedhæftet tabellen 'offers' samt 'stock' (offers = tilbud, og stock = produkter).

Offers
Fold kodeboks ind/udSQL kode 


Stock
Fold kodeboks ind/udSQL kode 




t