randome Skrevet 5. mai 2012 Del Skrevet 5. mai 2012 Hei. jeg lurer på hvordan jeg skal samle flere rader i en tabell slik at de får ett felles ordrenummer Jeg tenkte jeg kunne bruke TIMESTAMP ellerno til og sortere hvilke rader som skulle samles. En simpel php kode som genererer ett nummer og plasserer det i ett felt, og dette nummere er det samme på de som har samme TIMESTAMP. Noen forslag? Takker Lenke til kommentar
JohndoeMAKT Skrevet 5. mai 2012 Del Skrevet 5. mai 2012 Denne tråden hører hjemme i databaseforumet, ikke i PHP-forumet. Lenke til kommentar
etse Skrevet 5. mai 2012 Del Skrevet 5. mai 2012 (endret) Nå kommer du med litt lite info, men jeg ville hatt 4 tabeller: Personer: - Personer som bruker systemet, og legger inn ordre ID : Integer, primary key, auto increment Navn : String (Varchar) Ordre - Unike ordre ID : Integer, primary key, auto increment person_id : Integer, foreign key (til id-feltet i personer tabellen - altså hvem sin ordre dette er) bestillings_dato : datetime Produkter: Ulike produktene i systemet ID : Integer, primary key, auto increment Navn : String (varchar) OrdreProdukter: de ulike produktene i en bestilling. ordre_id : Integer, foreign_key (ID i Ordre-tabellen) produkt_id : Integer, foreign_key (ID i produkt-tabellen) antall : Integer Da kan du bruke enkle joins for å samle data du trenger i ulike situasjoner, og man slipper å gjenta for mye informasjon. Uten at jeg orker å se for nøye over tror jeg også denne skal være normalisert til 3NF, og kanskje BCNF (litt usikker på siste). Om man bryr seg om dette Endret 5. mai 2012 av etse Lenke til kommentar
randome Skrevet 5. mai 2012 Forfatter Del Skrevet 5. mai 2012 Takker for svar! som du ser på bildet vil jeg samle og generere ett ordrenummer til de produktene som har samme TIMESTAMP. leste meg litt opp på joins men fant ikke ut hvordan jeg kunne bruke det direkte :/ Lenke til kommentar
etse Skrevet 5. mai 2012 Del Skrevet 5. mai 2012 (endret) Før man begynner å utvikle ting med databaser burde man alltid lese seg litt opp på disse før. Måten du prøver å gjøre det på, blir en hack som ikke vil fungere ordentlig.F.eks.. hva om 2 stykker plasserer en ordre samtidig? Eller det skjer en delay når du legger inn ordren så ikke alle produktene får samme timestamp. Om du skal bruke oppsettet jeg ga deg, med det oppsettet du har der må du legge til et "status" felt i Ordre-tabbelen og en kolonne "pris" i produkter tabellen. Så vil du ha et fungerende system. Jeg orker ikke å forklare alt å lære deg opp på hvordan man lager gode database-strukturer, og hvordan ting fungerer. I stede vil jeg vise deg et eksempel. Om du ikke forstår tingene jeg viser under må du bare spørre - men ta det på et tegn at du burde lese deg opp på databaser, da dette egentlig er relativt elementære og simple ting. Kan vise et eksempel: Lager først tabellene: CREATE TABLE Users(id integer primary key, name string); CREATE TABLE OrderProducts(order_id integer, product_id integer, num_ordered integer); CREATE TABLE orders(id integer primary key, user integer, order_date datetime, status string); CREATE TABLE products(id integer primary key, name string, price integer); Legger inn noen eksempler på produkter som kan kjøpes: INSERT INTO products VALUES(null, "Melk", 13); INSERT INTO products VALUES(null, "Ost", 90); INSERT INTO products VALUES(null, "Brød", 25); Tabellen ser nå slik ut: id,name,price 1,Melk,13 2,Ost,90 3,"Brød",25 2 brukere registrerer seg på siden: INSERT INTO users VALUES(null, "user1"); INSERT INTO users VALUES(null, "user2"); Tabellen ser nå slik ut: id,name 1,user1 2,user2 Brukerene ønsker å legge inn en bestilling, og 2 ordrer blir opprettet. Disse er tomme og satt i status "shopping" som betyr at de ikke har fullført bestillingen enda. INSERT INTO orders VALUES(null, 1, current_timestamp, "shopping"); INSERT INTO orders VALUES(null, 2, current_timestamp, "shopping"); Tabellen ser nå slik ut: id,user,order_date,status 1,1,"2012-05-05 23:27:22",shopping 2,2,"2012-05-05 23:27:22",shopping Bruker 1 bestiller 3 melk, 1 ost og 1 brød INSERT INTO orderProducts VALUES(1, 1, 3); INSERT INTO orderProducts VALUES(1, 3, 1); INSERT INTO orderProducts VALUES(1, 2, 1); Bruker 2 bestiller 2 melk og 1 brød INSERT INTO orderProducts VALUES(2, 1, 2); INSERT INTO orderProducts VALUES(2, 3, 1); Tabellen ser nå slik ut: order_id,product_id,num_ordered 1,1,3 1,3,1 1,2,1 2,1,2 2,3,1 Når man har kommet så langt kan man begynne å lett legge til å fjerne produkter. Og en ordre har bare en ID. Man kan og lett hente ut masse informasjon. Kan komme med noen eksempler. Hente ut navnet på numproduktene i en ordre, prisen per produkt, og antall bestilt. Bruker orderen med ID = 1 som eksempel: SELECT products.name, products.price, orderProducts.num_ordered FROM products JOIN orderProducts ON products.id = orderProducts.product_id WHERE orderProducts.order_id = 1; Output: name,price,num_ordered Melk,13,3 Brød,25,1 Ost,90,1 Finne total pris på order med order_id = 2: SELECT SUM(orderProducts.num_ordered * products.price) as total_price FROM products JOIN orderProducts ON products.id = orderProducts.product_id GROUP BY orderProducts.order_id HAVING orderProducts.order_id = 2; Output: total_price 51 Endret 6. mai 2012 av etse Lenke til kommentar
randome Skrevet 6. mai 2012 Forfatter Del Skrevet 6. mai 2012 (endret) Takker, har klart å lage ordre nummer nå. problemet mitt nå er å sortere dette. Jeg vil ha noe som dette Ordernumber: XX Product: product 1 lllllllllllllllll product 2 Total price: XX jeg har kun klart det slik atm. Ordernumber: XX Product: product 1 Price: XX Ordernumber: XX Product: product 2 Price: XX mysql_select_db($database_lol, $lol); $query_ono = "SELECT DISTINCT ordre.ono FROM ordre WHERE ordre.bruker='{$_SESSION['MM_Username']}'"; $ono = mysql_query($query_ono, $lol) or die(mysql_error()); $row_ono = mysql_fetch_assoc($ono); $totalRows_ono = mysql_num_rows($ono); mysql_select_db($database_lol, $lol); $query_history = "SELECT ordre.vare FROM ordre WHERE ordre.ono={$ono}"; $history = mysql_query($query_history, $lol) or die(mysql_error()); $row_history = mysql_fetch_assoc($history); $totalRows_history = mysql_num_rows($history); Som du kan se her har jeg prøvd og reptere produktene under ordrenummer. WHERE ordre.ono={$ono} og med dette altså liste kun de som har samme ordrenummer, men den koden der funket visst ikke. Noen forslag? Endret 6. mai 2012 av randome Lenke til kommentar
etse Skrevet 6. mai 2012 Del Skrevet 6. mai 2012 for det første: mysql_select_db($database_lol, $lol); Det holder å gjøre det en gang prøv å lett på noen fnutter, altså $query_history = "SELECT ordre.vare FROM ordre WHERE ordre.ono='{$ono}'"; Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå