Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  10 1312
Hei!
Har sittet og klødd meg i hodet vel og lenge nå, og håper at det er noen freaks som kan hjelpe meg

Skal generere en faktura, med innhold fra en database.

Når ordren blir opprettet blir det laget en rad i tabellen ordre, med en ordre-ID, navnet på kunden og kontaktinfo.
Alle produktene som er valgt på ordren blir lagret i tabellen ordreelementer, og har en kolonne som refereder til ordre-ID'en.

Hvordan i alle dager skal jeg få hentet ut alle elementene til den ordren for å printe det til skjerm?

Har prøvd med diverse JOIN's uten hell.
Får hentet ett av produktene, men det stopper der.

Spørringen min ser slik ut:

Kode

$sql = "SELECT ordre.id, 
				ordre.uid, 
				ordre.dato, 
				ordre.status, 
				ordre.betalt, 
				ordre.navn, 
				ordre.adresse, 
				ordreelementer.oid,
				ordreelementer.navn AS elnavn,  
								
		FROM ordre RIGHT JOIN ordreelementer ON ordre.id=ordreelementer.oid 
		WHERE ordre.uid = ".brukerInfo('id')." AND ordre.id = ".$id."
Kjører [COLOR="RoyalBlue"]print_r()[/COLOR] på hele resultatet, og får da bare opp ett av navnene på produktene som er lagt inn i ordreelementer.

Håper det er noen kloke hoder her som kan hjelpe, for nå er jeg lei! Er sikkert småtteri for dere som er dreven på SQL, men jeg tror jeg har sett meg litt blind på koden nå.
Kan du nevne hvilke joiner du har prøvd? RIGHT JOIN ser jo riktig ut.
Ja, har prøvd alle egentlig. Er jo bare til å bytte ut RIGHT, med LEFT, INNER osv.

Er det kanskje en anen metode enn join jeg burde bruke/prøve?
Har aldri forstått meg på joins, men har også klart meg fint uten dem så langt. Kan ikke garantere for ytelsen på denne, men ganske sikker på at den funker!

Kode

select *
from ordre, ordreelementer
where ordre.id = $ordreID
and ordre.uid = $brukerID
and ordre.id = ordreelementer.oid
Syntes forresten at det var merkelig at du gjør oppslag på både ordreID og brukerID, burde ikke ordre-IDen være helt unik?
Sist endret av tripflag; 12. september 2013 kl. 02:34.
Vurdert å gjøre strukturen litt mer atomisk?
Sitat av hayer Vis innlegg
Vurdert å gjøre strukturen litt mer atomisk?
Vis hele sitatet...
Hva er det som ikke er atomisk i denne strukturen?
Sitat av Jurgen1337 Vis innlegg
Hva er det som ikke er atomisk i denne strukturen?
Vis hele sitatet...
En person f.eks? Men trenger ikke gjøres mer atomisk hvis dette er den eneste tabellen han trenger. Virket bare så "knyttet".

Noe slikt da;

Kode

SELECT
 ordre.navn,
 ordre.oid,
 ordre.id,
 ordre_items.oid,
 ordre_items.navn AS elnavn
FROM ordre
RIGHT JOIN ordre_items
 ON ordre.oid = ordre_items.oid
WHERE ordre.id=1 AND ordre.oid=1
Sitat av hayer Vis innlegg
En person f.eks? Men trenger ikke gjøres mer atomisk hvis dette er den eneste tabellen han trenger. Virket bare så "knyttet".

Noe slikt da;

Kode

SELECT
 ordre.navn,
 ordre.oid,
 ordre.id,
 ordre_items.oid,
 ordre_items.navn AS elnavn
FROM ordre
RIGHT JOIN ordre_items
 ON ordre.oid = ordre_items.oid
WHERE ordre.id=1 AND ordre.oid=1
Vis hele sitatet...
Ordre: ID, oid, navn
Ordre_items: id, navn, oid
Burde du ikke heller ha en LEFT JOIN her? Ved en left join vil du uansett få returnert ihvertfall en linje, med ordrehode-data, selv om den aktuelle ordren ikke har noen linjer (element-feltene vil da få verdien NULL). Med en RIGHT JOIN er jeg sannelig ikke sikker på hva som skjer...du får returnert en mer eller mindre tilfeldig element-rad, hvis det ikke finnes en hodepost med den angitte uid og id? Usikker.


Som nevnt lenger oppe synes jeg også det ser litt rart ut at du gjør utvalg på både uid og id, men det er kanskje slik at ordre-id i seg selv ikke er unik? Du har en ordrenummerserie per bruker? Hvis ikke kan du droppe utvalg på bruker-id ihvertfall.

Jeg ville forsøkt å kjøre spørringen med LEFT JOIN og evt. fjerne WHERE-clausen helt, for å se om du feks. spør etter en id som ikke finnes (da vil du ihvertfall få returnert rader).
Sitat av hayer Vis innlegg
En person f.eks? Men trenger ikke gjøres mer atomisk hvis dette er den eneste tabellen han trenger. Virket bare så "knyttet".

Noe slikt da;

Kode

SELECT
 ordre.navn,
 ordre.oid,
 ordre.id,
 ordre_items.oid,
 ordre_items.navn AS elnavn
FROM ordre
RIGHT JOIN ordre_items
 ON ordre.oid = ordre_items.oid
WHERE ordre.id=1 AND ordre.oid=1


Ordre: ID, oid, navn
Ordre_items: id, navn, oid
Vis hele sitatet...
Jeg tror ikke vi tenker på det samme. Jeg tenkte med en gang på 1NF som krever at tabellen følge atomærprinsippet dvs at hver kolonne ikke skal ha mer enn "en data" i seg. Om du skal lagre navn og adresse i kolonnen Personinfo bryter du med atomærprinsippet om du lager: "Per Olsen, Olsenveien 13"
Kjører følgende spørring:

Kode

$sql = "SELECT ordre.id, 
								ordre.uid, 
								ordre.dato, 
								ordre.status, 
								ordre.betalt, 
								ordre.navn, 
								ordre.adresse, 
								ordreelementer.oid,
								ordreelementer.navn AS elnavn,  
								SUM(ordreelementer.ant * ordreelementer.stkpris) AS tot
								
							FROM ordre LEFT JOIN ordreelementer ON ordre.id=ordreelementer.oid 
							WHERE ordre.uid = ".brukerInfo('id')." AND ordre.id = ".$id."
							";
Da får jeg returnert dette resultatet fra databasen:
Array
(
[0] => 9
[id] => 9
[1] => 6
[uid] => 6
[2] => 2013-09-12 21:09:41
[dato] => 2013-09-12 21:09:41
[3] => Registrert
[status] => Registrert
[4] => 0
[betalt] => 0
[5] => Demo Demo
[navn] => Demo Demo
[6] => Postboks 132, 5020 BERGEN
[adresse] => Postboks 132, 5020 BERGEN
[7] => 9
[oid] => 9
[8] => 2 bilder her!
[elnavn] => 2 bilder her!
[9] => 1222
[tot] => 1222
)
Vis hele sitatet...

Med RIGHT JOIN får jeg akkurat samme resultat.
Jeg lagrer navn og adresse på ordre i stedet for å hente fra brukerID for å forhindre at navn og adresse blir endret etter ordre er lagt inn.
▼ ... noen uker senere ... ▼
Hei, har du fått dette her til?? Isåfall, kunne du delt hele SQL koden og PHP koden med meg? Jeg tenker å lage det samme til min nettbutikk