[MySQLi] Abfrage mit Join anpassen

cola1

Mitglied
Hey,

habe ein Problemchen bei der Ausgabe von folgendem Skript:
HTML:
<form action="" method="post">
                <fieldset>
                    <?php echo getItemNames(1); ?>
                    <div class="clear"></div>
                    <div class="center">
                        <input id="buy" type="submit" name="submit" value="Kaufen" />
                    </div>
                </fieldset>
            </form>
PHP:
function getItemNames($npcID) {
    global $db;
    
    $sql    =   "
                SELECT 
                    items.itemName,
                    items.itemID
                FROM
                    items
                JOIN
                    npc_items
                ON
                    npc_items.npcID = $npcID
                ORDER BY
                    neededLevel DESC
                LIMIT 10
                ";
    $result = $db->query($sql);
    if (!$result) {
       printf("SQL-Error: %s\n", $db->error);
    }
    $rows   = array();
    
    while($row = $result->fetch_object()) {
        $rows[] = $row;
    }
    
    foreach($rows as $row) {
        echo "<input id='$row->itemID' type='radio' name='item' value='$row->itemID' />";
        echo "<label for='$row->itemID'>";
        echo "$row->itemName";
        echo "</label>";
    }
}

Das Problem ist, dass die zwei vorhandenen Einträge doppelt ausgegeben werden, als würde die Abfrage zweimal ausgeführt werden. Wird sich aber nicht.
Es sollen alle Namen der Items eines bestimmten Händlers/NPCs angezeigt werden. Da ich bisher nur mit Formularen gearbeitet habe versuche ich auch hier wieder die Formulare einzusetzen und wie man beim echo sieht werden die IDs der Items dazu genutzt um leerzeichen-freie IDs und values für input und label zu erzeugen. Taugt das so?
 
Dir fehlt eine JOIN Bedingung. Ohne diese werde alle Permutation der beiden Tabellen ausgegeben.

So in etwa (ich kenne deine Spaltennamen nicht):

Vorher
SQL:
SELECT 
	items.itemName,
	items.itemID
FROM
	items
JOIN
	npc_items
ON
	npc_items.npcID = $npcID
ORDER BY
	neededLevel DESC
LIMIT 10

Nachher
SQL:
SELECT 
	items.itemName,
	items.itemID
FROM
	items
JOIN
	npc_items
ON
	npc_items.ID = items.itemID
WHERE
	npc_items.npcID = $npcID
ORDER BY
	neededLevel DESC
LIMIT 10



Außerdem kannst du dir hier das echo sparen <?php echo getItemNames(1); ?>, die Funktion hat ja gar keinen Rückgabewert.
 
Hey, genau das ist es (angepasst natürlich). Danke dir.
Von Permutationen habe ich noch nichts gehört :rolleyes:
Immer wieder wunderlich wenn du kleine Änderungen andere Bedingungen eintreten...

> Außerdem kannst du dir hier das echo sparen <?php echo getItemNames(1); ?>, die Funktion hat ja gar keinen Rückgabewert.

Oh stimmt, danke :D
 

Neue Beiträge

Zurück