Avatar billede Slettet bruger
12. februar 2009 - 15:11 Der er 3 kommentarer og
1 løsning

Udtræk fra TO tabeller (relation) og vise i EN dropdown

Hej, jeg er ved at lave noget sjov for at vise træningsudvikling vha. grafer. Det virker sådan set fint, men nu er jeg ved at lave en form, hvormed man kan smide sine trænings-resultater i databasen. Tror det er ret tricky - eller...? Smider 100 point i nakken til en hjælpsom sjæl :-)


Først har jeg i databasen en tabel (training_ex_group), der indeholder øvelses-kategorierne, eks.:
- Chest
- Shoulders
- Back

Jeg har tildelt dem hhv. "group_id" (bare autonum.) og "group_name".


Jeg har endnu en tabel (training_ex), der indeholder øvelserne, der knytter sig til hver øvelses-kategori, eks.:

(Dem der knytter sig til "Chest")
- Bench press
- Flyers

(Dem der knytter sig til "Shoulders")
- Vertical bar pull
- ...

(Dem der knytter sig til "Back")
- ...
- ...

Jeg har tildelt dem: "ex_id" (autonum.) "ex_name" (navn; "Bench press", "Flyers" osv.) og "belong_to_group_nr" (et tal der knytter sig til øvelses-kategorien).


Ok, så langt så godt...

Det jeg konkret ønsker er en dropdown-menu, hvorfra man kan vælge hvilken øvelse man ønsker at indtaste sine resultater til. MEN - jeg ønsker at dropdown-menuen benytter sig af optgroup, så det kommer til at se sådan ud:

Chest
- Bench press
- Flyers
Shoulders
- Vertical bar pull
- ...
Back
- ...
- ...

Så - hvordan skal mit udtræk se ud, når det skal trække fra 2 forskellige tabeller?
Avatar billede bitkid Nybegynder
12. februar 2009 - 15:44 #1
Du kan bruge en join:

SELECT * FROM training_ex_group teg
INNER JOIN training_ex te ON teg.group_id = te.belong_to_group_nr
ORDER BY group_name, ex_name
Avatar billede Slettet bruger
12. februar 2009 - 17:12 #2
Hej, tak for input... den er der næsten, tror jeg - men jeg mangler at få vist øvelses-kategorierne (group_name) som optgroup i dropdown-menuen. Kan du gennemskue den?

Kode:

<select name="exercises">
<?php
include('db_connect.php');
$query = mysql_query("SELECT * FROM training_ex_group teg INNER JOIN training_ex te ON teg.group_id = te.belong_to_group_nr ORDER BY group_id, ex_id");
while($row = mysql_fetch_assoc($query))
    {
    $ex_name = $row['ex_name'];
    $ex_id = $row['ex_id'];
    $group_name = $row['group_name'];
   
    ?>           
        <option value="<?php echo $ex_id; ?>"><?php echo $ex_name; ?></option>
    <?php
    }
mysql_close();
?>
</select>
Avatar billede bitkid Nybegynder
12. februar 2009 - 18:45 #3
I det her tilfælde ville jeg faktisk lave 2 queries. 1 til groups og 1 til exersize.

I din kode vil det letteste være at indsætte følgende, hvor din while er:

$first = true;
while($row = mysql_fetch_assoc($query)) {
    if ($row["group_name"] != $group_name) {
        if (!$first) {
            echo "</optgroup>";
        }
        echo '<optgroup label="'.$row["group_name"].'">';
        $first = false;
    }
   
herefter kommer resten af din kode.

Sæt en </optgroup> lige før </select>.

Så skulle det vist passe :-)
Avatar billede Slettet bruger
12. februar 2009 - 19:03 #4
Ha, nå jeg fandt selv ud af det - omend på en noget mere uskøn måde. Selvom det virker, tror jeg, jeg tager din! Tak for hjælpen! :-)


<select name="exercises">
<?php
$group_name_loop = "";
$first = "true";

include('db_connect.php');
$query = mysql_query("SELECT * FROM training_ex_group teg INNER JOIN bms_training_ex te ON teg.group_id = te.belong_to_group_nr ORDER BY group_id, ex_id");
while($row = mysql_fetch_assoc($query))
{
    $ex_name = $row['ex_name'];
    $ex_id = $row['ex_id'];
    $group_name = $row['group_name'];
   
    if ($group_name != $group_name_loop && $first == "true")
        {       
                    if ($new_optgroup == "true")
                        {
                        echo "</optgroup>";
                        }   
                echo "<optgroup label='".$group_name."'>";
                echo "<option value='".$ex_id."'>".$ex_name."</option>";
                $first = "false";
        }
    elseif ($group_name != $group_name_loop && $first == "false")
        {
                echo "</optgroup>";
                echo "<optgroup label='".$group_name."'>";
                echo "<option value='".$ex_id."'>".$ex_name."</option>";
                $new_optgroup = "true";
                $first = "true";
        }
    else
        {
        echo "<option value='".$ex_id."'>".$ex_name."</option>";
        }
   
    $group_name_loop = $group_name;

}
                echo "</optgroup>";
mysql_close();
?>
</select>
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