Avatar billede donlup Nybegynder
04. december 2011 - 15:52 Der er 11 kommentarer og
1 løsning

mysql : Select fra to tabels i php

Ser i jeg har en php side som skal hente noget fra to tabels i en mysql database og kæde data sammen.

tabels ser sådan ud

account.id (auto inc.) Transactionens id
account.userid (int) Brugerens id
account.storeid (int) Butikkens id
account.amount (int) Brugerens forbrug

store.storeid (auto inc.) Butikkens id
store.name (text) Butikkens navn
store.point (int) Butikkens point fordeling per 100 kr brugt. dvs 20 giver 5 points per 100 kr brugt.

User.userid vælges naturligvis af mig.

Hvad jeg ønsker at gøre er at finde ud af hvor meget en bruger har af points per butik så simpelt så muligt.

så output er noget i stil med :

Svensens pølesebiks : 15 points
Susannes klippehus : 40 points

Nogen der kan hjælpe? :)
Avatar billede arne_v Ekspert
04. december 2011 - 16:21 #1
proev:

SELECT store.name,SUM(account.amount)/store.point
FROM account JOIN store ON account.storeid=store.storeid
WHERE account.userid=X
GROUP BY store.name
Avatar billede arne_v Ekspert
04. december 2011 - 16:21 #2
Og store.name skal vel vaere VARCHAR ikke TEXT ??
Avatar billede donlup Nybegynder
04. december 2011 - 16:31 #3
heh ja godt fanget det retter jeg da lige, jeg prøver lige din løsning og skriver tilbage
Avatar billede donlup Nybegynder
04. december 2011 - 16:47 #4
Heh jeg kommer til at trække lidt mere på dig hvis det er okey, kunne du overtales til at hjælpe mig med at dumpe dataerne via et loop fordi det er vist over min kunnen.
Avatar billede arne_v Ekspert
04. december 2011 - 16:50 #5
1) virker den SQL?

2) hvad mener du med dumpe i et loop?
Avatar billede donlup Nybegynder
04. december 2011 - 17:02 #6
okey jeg smider lige hvad jeg har lavet.

<?php
include("assets/constants.php");
$userid = '4';
mysql_connect($DB_SERVER,$DB_USER,$DB_PASS);
mysql_select_db($DB_NAME);
$result=mysql_query("SELECT store.name,SUM(account.amount)/store.point
FROM account JOIN store ON account.storeid=store.storeid
WHERE account.userid='$userid'
GROUP BY store.name");
?>

umedbart ville jeg jo bruge en $row = mysql_fetch_row($result);
til at hente data men det kan jeg vist ikke bare i dette tilfælde.
Hvad jeg ønkser output skal være i sidste ende er
store.name og også total amount fra den butik devideret med 100 gange med store.point
Avatar billede donlup Nybegynder
04. december 2011 - 17:25 #7
Så der er en lille fejl i sql'en men det er nok mig som ikke har udtrykt hvad jeg ville klart med de points der.

(SUM(account.amount)/100)*store.point burde fikse det hvis jeg ikke er helt galt på den.

Men jeg kan simpelthen ikke finde ud af at få dataerne ud så de ser sådan her ud fx

Svensens pølsebiks : 10 points
Susannes Klippehus : 32 points
Knuds tømmerhal : 6 points

altså så jeg kan lave en while some lige smider alle de butikker hvor der rent faktisk er points optjent.
Avatar billede arne_v Ekspert
04. december 2011 - 17:38 #8
Du skal vel have en helt normal while loekke?
Avatar billede arne_v Ekspert
04. december 2011 - 17:39 #9
$result=mysql_query("SELECT store.name AS name,SUM(account.amount)/store.point AS point
FROM account JOIN store ON account.storeid=store.storeid
WHERE account.userid='$userid'
GROUP BY store.name");

while($row = mysql_fetch_array($result)) {
    // brug $row['name'] og $row['point']
}
Avatar billede donlup Nybegynder
04. december 2011 - 17:40 #10
Undskyld 1000 gange det virker jo bare, jeg havde lavet en som hed store.pointsys i stedet for store.point mange tak for din hjælp genialt sql intet mindre :)
Avatar billede donlup Nybegynder
04. december 2011 - 18:03 #11
smider du ikke lige et svar så jeg kan lukke :)
Avatar billede arne_v Ekspert
04. december 2011 - 19:09 #12
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
Kurser inden for grundlæggende programmering

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