Gå til innhold

Samle enkelte rader i en tabell som ordre


Anbefalte innlegg

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
Videoannonse
Annonse

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 :p

Endret av etse
Lenke til kommentar

Takker for svar!

 

order.png

 

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

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 av etse
Lenke til kommentar

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 av randome
Lenke til kommentar

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...