Avatar billede martinkjaer Nybegynder
08. august 2004 - 21:52 Der er 9 kommentarer og
1 løsning

Find mest solgte

hej,

Jeg har en webshop, hvor jeg har en tabel med ordre. Ordrerne kan være uafsluttet eller afsluttet, jeg sætter en felt i tabellen til 1, hvis den er afsluttet.

Jeg har så en anden tabel med de varer, som hører til ordrerne. Dvs en tabel, hvor jeg henviser til et varer-nummer og et ordrenummer, samt varens pris.

Jeg vil så gerne lave en oversigt over de mest solgte varer. Dvs. en funktion, hvor alle afsluttede ordrer løbes igennem, og de varer som er tilknyttet afsluttede ordrer tælles sammen og sorteres efter dem med flest styk pr. varenummer.

Kan det gøres simpelt? Jeg bruger MySQL sammen med PHP på en Apache-server.

På forhånd tak,
Hilsen
Martin
Avatar billede arne_v Ekspert
08. august 2004 - 21:58 #1
Det er lidt svært uden eksakt tabel struktur.

Noget a la:

SELECT ordrelinie.varenummer,SUM(ordrelinie.styk) AS sum
FROM ordre JOIN ordrelinie ON ordre.ordrenummer=ordrelinie.ordrenummer
WHERE ordre.status=1
GROUP BY ordrelinie.varenummer
ORDER BY sum DESC
Avatar billede martinkjaer Nybegynder
08. august 2004 - 22:05 #2
Hej,

Det er ordre-strukturen, hvor status er 1, hvis ordren skal tælles med.

  id int(11) NOT NULL auto_increment,
  medlemnr int(11) NOT NULL default '0',
  oprettet int(11) NOT NULL default '0',
  bestilt int(11) NOT NULL default '0',
  status tinyint(4) NOT NULL default '0',
  fragt tinytext NOT NULL,
  fragtpris int(11) NOT NULL default '0',
  ipadresse text NOT NULL,
  betaling tinytext NOT NULL,
  bemaerk text NOT NULL,
  program tinytext NOT NULL,
  levnavn text NOT NULL,
  levadresse text NOT NULL,
  levpostnummer tinytext NOT NULL,
  levbyen tinytext NOT NULL,

Dette er strukturen på de varelinier, som har et varenummer, ordrenummer og pris tilknyttet:

  id int(11) NOT NULL auto_increment,
  ordre int(11) NOT NULL default '0',
  vinid int(11) NOT NULL default '0',
  apris float NOT NULL default '0',
  antal int(11) NOT NULL default '0',
  dato int(11) NOT NULL default '0',
Avatar billede arne_v Ekspert
08. august 2004 - 22:08 #3
SELECT varelinie.vinid,SUM(varelinie.antal) AS sum
FROM ordre JOIN varelinie ON ordre.id=varelinie.ordre
WHERE ordre.status=1
GROUP BY varelinie.vinid
ORDER BY sum DESC
Avatar billede martinkjaer Nybegynder
08. august 2004 - 22:17 #4
Hej,

Nu hedder tabellen med varelinier: ordrevin.

Jeg får ikke noget output med disse linier:

$foresp = mysql_query("SELECT ordrevin.vinid,SUM(ordrevin.antal) AS sum FROM ordre JOIN ordrevin ON ordre.id=ordrevin.ordre WHERE ordre.status=1 GROUP BY ordrevin.vinid ORDER BY sum DESC");

while ($data = mysql_fetch_array($foresp))
{
echo $data[0];
}

Har jeg lavet en fejl?
Avatar billede arne_v Ekspert
08. august 2004 - 22:20 #5
Har du mulighed for at prøve den query i PHPMyAdmin eller andet MySQL
manegement tool ?
Avatar billede martinkjaer Nybegynder
08. august 2004 - 22:22 #6
SQL-forespørgsel : 

SELECT ordrevin.vinid,SUM(ordrevin.antal) AS sum FROM ordre JOIN ordrevin ON ordre.id=ordrevin.ordre WHERE ordre.status=1 GROUP BY ordrevin.vinid ORDER BY sum DESC LIMIT 0, 30

MySQL returnerede:

You have an error in your SQL syntax near 'ON ordre.id=ordrevin.ordre WHERE ordre.status=1 GROUP BY ordrevin.vinid ORDER BY' at line 1
Avatar billede arne_v Ekspert
08. august 2004 - 22:57 #7
Prøv lige:

SELECT ordrevin.vinid,SUM(ordrevin.antal) AS sum
FROM ordre INNER JOIN ordrevin ON ordre.id=ordrevin.ordre
WHERE ordre.status=1
GROUP BY ordrevin.vinid
ORDER BY sum DESC
LIMIT 0, 30
Avatar billede arne_v Ekspert
08. august 2004 - 22:57 #8
Altså INNER JOIN i.s.f. bare JOIN
Avatar billede martinkjaer Nybegynder
09. august 2004 - 08:40 #9
Virker! Klasse-programmering! Jeg må sætte mig bedre ind i MySQL's muligheder for denne forespørgelser er da helt i top...

Put et svar, så du kan få point.
Avatar billede arne_v Ekspert
09. august 2004 - 11:51 #10
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester