Avatar billede spidr Nybegynder
03. august 2007 - 17:11 Der er 7 kommentarer og
1 løsning

Ligge sammen fra flere forskellige tabeller (sql)

Jeg har 4 tabeller hvor i spillerne af mit spils items ligger.

Jeg har 1 tabel der fortæller hvilke items hver bruger har. Den database peger på de andre databaser, og det er faktisk her mit problem er. Jeg kan ikke finde dem den peger på og ligge deres indhold sammen :S

Jeg vil gerne have lagt alle de forskellige stats sammen fra hver database hvor ens UserId passer med.

Lad os f.eks. andtage at man har en post i LovehinaItems2 tabellen med ens id OG hvor pre = '3' så skal den tage alle stats fra den post med id = '3' i LoveHinaITEMprefix tabellen og ligge sammen med alle de andre.

Både made, pre og post kan være sat til noget der skal findes i en af de andre, men det kan også ske at kun 1 eller 2 af dem er sat til andet end 0.

LovehinaItems2:
  id  int(11) 
  userid  int(9)    Nej  0                           
  made  int(9)    Nej  0               
  pre  int(9)    Nej  0         
  post  int(9)    Nej  0             

LoveHinaITEMmade:
  id  int(11) 
  hp  int(11)    Nej  0               
  mp  int(11)    Nej  0               
  cash  int(11)    Nej  0               
  char  int(11)    Nej  0               
  int  int(11)    Nej  0               
  str  int(11)    Nej  0               
  fan  int(11)    Nej  0               
  cook  int(11)    Nej  0               
  tpt  int(11)    Nej  0               
  maxturns  int(11)    Nej  0

LoveHinaITEMprefix
  id  int(11) 
  hp  int(11)    Nej  0               
  mp  int(11)    Nej  0               
  cash  int(11)    Nej  0               
  char  int(11)    Nej  0               
  int  int(11)    Nej  0               
  str  int(11)    Nej  0               
  fan  int(11)    Nej  0               
  cook  int(11)    Nej  0               
  tpt  int(11)    Nej  0               
  maxturns  int(11)    Nej  0             

LoveHinaITEMpostfix
  id  int(11) 
  hp  int(11)    Nej  0               
  mp  int(11)    Nej  0               
  cash  int(11)    Nej  0               
  char  int(11)    Nej  0               
  int  int(11)    Nej  0               
  str  int(11)    Nej  0               
  fan  int(11)    Nej  0               
  cook  int(11)    Nej  0               
  tpt  int(11)    Nej  0               
  maxturns  int(11)    Nej  0
Avatar billede mcardle Nybegynder
03. august 2007 - 19:16 #1
Okay, hvis jeg har forstået det rigtigt, så er pre og id det samme.

<?php

$id = $_SESSION["userid"];

$getStats = mysql_query("
    SELECT
        LoveHinaITEMmade.hp as table1_stats,
        LoveHinaITEMprefix.hp as table2_stats,
        LoveHinaITEMpostfix.hp as table3_stats
    FROM
        LoveHinaITEMmade,
        LoveHinaITEMprefix,
        LoveHinaITEMpostfix
    WHERE
        LovehinaItems2.userid='$id'
    AND
        LoveHinaITEMmade.id='$id'
    AND
        LoveHinaITEMprefix.id='$id'
    AND
        LoveHinaITEMpostfix.id='$id'
") or die(mysql_error());

$showStats = mysql_fetch_array($getStats);

$getSumStats = array_sum($showStats);

?>

Så skal du bare gøre det her ved alle dem der skal lægges sammen.

//mcardle
Avatar billede spidr Nybegynder
03. august 2007 - 21:01 #2
ah æv, skrev mit svar tidligere men det er åbenbart ikke kommet så prøver igen..

Har vidst ikke fået forklaret mig helt korrekt.

Den første del ser rigtig ud, men når vi kommer ned til AND så går det vidst galt.

LoveHinaITEMmade.id skal svare til  LovehinaItems2.made

Altså  LovehinaItems2.userid er brugeres id, det ser rigtigt nok ud, der i står så id'erne på de poster i de andre databaser der skal bruges, f.eks. er LovehinaItems2.made id'en på en post i LoveHinaITEMmade der skal bruges
Avatar billede spidr Nybegynder
03. august 2007 - 21:14 #3
Når jeg prøver at køre det stykke kode du har givet mig, bliver den ved med at sige;

Unknown table 'LovehinaItems2' in where clause

og jeg ved altså at tabelen findes :S
Avatar billede spidr Nybegynder
03. august 2007 - 21:22 #4
Men går ud fra det bare skyldes at den manglede i from, men det virker jo stadig ikke.
Avatar billede mcardle Nybegynder
03. august 2007 - 22:17 #5
Det ville være næmmere, hvis alle tabellerne havde den samme række userid. ;o)

//mcardle
Avatar billede spidr Nybegynder
03. august 2007 - 22:44 #6
Nej..

For hele pointen er jo netop at jeg kan tilføje items til de forskellige databaser uden at tilføje dem til en enkelt bruger :)

lige nu er der kun 50 poster i hver af de 3 databaser; LoveHinaITEMmade, LoveHinaITEMprefix og LoveHinaITEMpostfix.

Men der er over 10.000 posts i LovehinaItems2. (brugere har altså fundet over 10.000 items der består af dele fra de andre databaser)

Skal jeg så finde de items en bruger har. så printer jeg dem ud med koden nedefor (der også tager højde for om det er premade item LoveHinaITEMmade eller et random generated item der består af en base og et pre og/eller et post fix :)





$query = mysql_query("SELECT * FROM LovehinaItems2 where userid = '$ID' ORDER BY color desc,slot") or die(mysql_error());
if (mysql_num_rows($query) == 0) {
    echo 'You dont have any items yet!<br>';
} else {
    echo '<table width="100%" id="list" class=itemtable><tr><td width=130><b>Name</b>:</td><td><b>Text</b>:</td><td></td></tr>';

    while($row = mysql_fetch_array($query)) {

        if ($row[made] > 0) {
            $hent6 = mysql_query("SELECT * FROM LoveHinaITEMmade WHERE id = '$row[made]'") or die(mysql_error());
            $vis6 = mysql_fetch_array($hent6);
            $navnet = $vis6[name];
            $descstr = $vis6[description];
            $slot = $vis6[slot];

            $finalhp = $vis6[hp];
            $finalmp = $vis6[mp];
            $finalcash = $vis6[cash];
            $finalchar = $vis6[char];
            $finalint = $vis6[int];
            $finalstr = $vis6[str];
            $finalfan = $vis6[fan];
            $finalcook = $vis6[cook];
            $finaltpt = $vis6[tpt];
            $finalmaxturns = $vis6[maxturns];


            $thestats = "";   
            if ($finalhp != 0) {$thestats = "$thestats HP: $finalhp%, ";}
            if ($finalmp != 0) {$thestats = "$thestats MP: $finalmp%, ";}
            if ($finalcash != 0) {$thestats = "$thestats Magic Find: $finalcash%, ";}
            if ($finalchar != 0) {$thestats = "$thestats Charisma: $finalchar%, ";}
            if ($finalint != 0) {$thestats = "$thestats Intilligence: $finalint%, ";}
            if ($finalstr != 0) {$thestats = "$thestats Strength: $finalstr%, ";}
            if ($finalfan != 0) {$thestats = "$thestats Fantasy: $finalfan%, ";}
            if ($finalcook != 0) {$thestats = "$thestats Cooking: $finalcook%, ";}
            if ($finaltpt != 0) {$thestats = "$thestats Turns each Tick: $finaltpt, ";}   
            if ($finalmaxturns != 0) {$thestats = "$thestats Max Turns: $finalmaxturns, ";}
            if ($thestats == "") { $thestats = "This item forgot its purpose!"; }


        }
        else {
            $hent3 = mysql_query("SELECT * FROM LoveHinaITEMbase WHERE id = '$row[base]'") or die(mysql_error());
            $vis3 = mysql_fetch_array($hent3);
            $hent4 = mysql_query("SELECT * FROM LoveHinaITEMprefix WHERE id = '$row[pre]'") or die(mysql_error());
            $vis4 = mysql_fetch_array($hent4);
            $hent5 = mysql_query("SELECT * FROM LoveHinaITEMpostfix WHERE id = '$row[post]'") or die(mysql_error());
            $vis5 = mysql_fetch_array($hent5);
            $navnet = $vis4[Name] . " " . $vis3[Name] . " " . $vis5[Name];
            $thestats = "Will come";


            $slot = $vis3[Slot];
            $basename = $vis3[Name];
            $basehp = $vis3[hp];
            $basemp = $vis3[mp];
            $basecash = $vis3[cash];
            $basechar = $vis3[char];
            $baseint = $vis3[int];
            $basestr = $vis3[str];
            $basefan = $vis3[fan];
            $basecook = $vis3[cook];
            $basetpt = $vis3[tpt];
            $basemaxturns = $vis3[maxturns];

            $prename = $vis4[Name];
            $prehp = $vis4[hp];
            $premp = $vis4[mp];
            $precash = $vis4[cash];
            $prechar = $vis4[char];
            $preint = $vis4[int];
            $prestr = $vis4[str];
            $prefan = $vis4[fan];
            $precook = $vis4[cook];
            $pretpt = $vis4[tpt];
            $premaxturns = $vis4[maxturns];

            $postname = $vis5[Name];
            $posthp = $vis5[hp];
            $postmp = $vis5[mp];
            $postcash = $vis5[cash];
            $postchar = $vis5[char];
            $postint = $vis5[int];
            $poststr = $vis5[str];
            $postfan = $vis5[fan];
            $postcook = $vis5[cook];
            $posttpt = $vis5[tpt];
            $postmaxturns = $vis5[maxturns];


            $finalhp = $posthp + $prehp + $basehp;
            $finalmp =  $postmp + $premp + $basemp;
            $finalcash =  $postcash + $precash + $basecash;
            $finalchar =  $postchar + $prechar + $basechar;
            $finalint =  $postint + $preint + $baseint;
            $finalstr =  $poststr + $prestr + $basestr;
            $finalfan =  $postfan + $prefan + $basefan;
            $finalcook =  $postcook + $precook + $basecook;
            $finaltpt =  $posttpt + $pretpt + $basetpt;
            $finalmaxturns =  $postmaxturns + $premaxturns + $basemaxturns;
       
            $thestats = "";   
            if ($finalhp != 0) {$thestats = "$thestats HP: $finalhp%, ";}
            if ($finalmp != 0) {$thestats = "$thestats MP: $finalmp%, ";}
            if ($finalcash != 0) {$thestats = "$thestats Magic Find: $finalcash%, ";}
            if ($finalchar != 0) {$thestats = "$thestats Charisma: $finalchar%, ";}
            if ($finalint != 0) {$thestats = "$thestats Intilligence: $finalint%, ";}
            if ($finalstr != 0) {$thestats = "$thestats Strength: $finalstr%, ";}
            if ($finalfan != 0) {$thestats = "$thestats Fantasy: $finalfan%, ";}
            if ($finalcook != 0) {$thestats = "$thestats Cooking: $finalcook%, ";}
            if ($finaltpt != 0) {$thestats = "$thestats Turns each Tick: $finaltpt, ";}
            if ($finalmaxturns != 0) {$thestats = "$thestats Max Turns: $finalmaxturns, ";}
            if ($thestats == "") { $thestats = "This item forgot its purpose!"; }
            $descstr = "";


        }








if ($row[color] == 1) { $itemnavn = "<span class=itemmagic>$navnet</span>";}
elseif ($row[color] == 2) { $itemnavn = "<span class=itemrare>$navnet</span>";}
elseif ($row[color] == 3) { $itemnavn = "<span class=itemset>$navnet</span>";}
elseif ($row[color] == 4) { $itemnavn = "<span class=itemunique>$navnet</span>";}
elseif ($row[color] == 5) { $itemnavn = "<span class=itemepic>$navnet</span>";}

        echo "<tr><td class=tabletd1><b>$itemnavn</b></td>";
                echo "<td class=tabletd2>($slot) $thestats<br><br>$descstr</td><td><form name=form2 action=items2.php method=post><input type=hidden name=itemtodrop value=$row[id]><input type=submit name=submit value=Drop class=knap2></form></td>";
        echo '</tr>';
    }
    echo '</table>';
}
Avatar billede spidr Nybegynder
04. august 2007 - 11:41 #7
Ingen hjælp at hente?
Avatar billede spidr Nybegynder
07. august 2007 - 18:53 #8
Guess not..
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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