SELECT DISTINCT * FROM mp_ing INNER JOIN mp_dishing ON mp_ing.ingId = mp_dishing.ingId WHERE mp_dishing.dishId != '".$dishId."' ORDER BY mp_ing.name ASC
du skrev att vid sökning av ingId = 1 så fick du två träffar.
Du har ingen parameter i ditt WHERE-uttryck som heter ingId, däremot har du dishId.
Var det bara en felskrivning eller menade du något annat?
Tanken med != dishId är att man endast ska lista de ingredienser som inte redan ingår i maträtten. Jag vill alltså ha ut alla (inga dubletter) ingId från mp_dishing som inte har det dishId som variabeln innehåller.
Jag bröt ut de två fält jag vill ha resultat av (dishId och name) för att ange dem DISTINCT:a. Det resulterade i 0 resultat, testat både mot phpMyAdmin med blandade värden och genom det riktiga PHP-scriptet.
Ditt exempel fungerade inte heller, LarsG. Så här ser koden ut nu, när jag inte längre får ut några resultat alls:
function printMod($cartDishId){
# Print form för adding/deleting ingredients to a given dish
$modSql = "SELECT * FROM mp_cart WHERE cartDishId = '".$cartDishId."' LIMIT 1";
$modQuery = mysql_query($modSql);
while($mod = mysql_fetch_array($modQuery)){
$dishId = $mod['dishId'];
$plusIngSql = "SELECT ingId, name FROM mp_ing WHERE ingId IN (SELECT ingId FROM mp_dishing WHERE dishId <> ".$dishId.") ORDER BY name ASC";
$plusIngQuery = mysql_query($plusIngSql);
echo'
<form action="'.$_SERVER['PHP_SELF'].'" method="post">
<input type="hidden" value="'.$cartDishId.'" name="cartDishId" />
<p><label for="plusIng">Lägg till ingrediens</label>
<select name="plusIng" id="plusIng">
<option value="0">Ingen ändring</option>';
while($plusIng = mysql_fetch_array($plusIngQuery)){
echo'
<option value="'.$plusIng['ingId'].'">'.ucwords($plusIng['name']).'</option>';
}
echo'
</select>
</p>';
$minusIngSql = "SELECT ingId, name FROM mp_ing WHERE ingId IN (SELECT ingId FROM mp_dishing WHERE dishId = ".$dishId.") ORDER BY name ASC";
$minusIngQuery = mysql_query($minusIngSql);
echo'
<p><label for="minusIng">Ta bort ingrediens</label>
<select name="minusIng" id="minusIng">
<option value="0">Ingen ändring</option>';
while($minusIng = mysql_fetch_array($minusIngQuery)){
echo'
<option value="'.$minusIng['ingId'].'">'.$minusIng['name'].'</option>';
}
echo'
</select>
</p>
<p><input type="submit" value="Spara ändringar" name="saveMod" /></p>
</form>
';
}
}
Jag ändrade från ditt id till ingId i SELECT. Är det fel i något annat än i SQL? Databasen är av typen MySQL, desvärre vet jag inte vilken version. Ifall vetskapen om vilken version det är krävs för att nå en lösning kanske du kan tipsa om en lämplig SQL-sats.
SELECT ingId, name
FROM mp_ing
WHERE ingId NOT
IN (
SELECT ingId
FROM mp_dishing
WHERE dishId = '1'
)
ORDER BY name ASC
LIMIT 0 , 30
MySQL sa: Dokumentation
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'select ingId
from mp_dishing
WHERE dishId = '1'
SELECT i.id,i.name
FROM mp_ing i
LEFT JOIN mp_dishing d ON d.dishId = " . $dishId . " AND i.ingId=d.ingId
WHERE d.dishId IS NULL
GROUP BY i.id,i.name
ORDER BY i.name ASC