28. november 2015 - 20:46Der er
4 kommentarer og 1 løsning
foreach / 'distinct'
Jeg skal lave opslag i den ene side af en mange-til-mange tabel og kun bruge de unikke forekomster på den anden side.
Udtræk af alle forekomster på den anden side kører fint med nedenstående kode. Problemet er at 'distinct' (og måske andre parametre) ikke fungerer inde i en foreach-løkke.
Hvad kan gøres som alternativ til "select distinct dok_id ...."?
Generelt, hvis du er nødt til at køre et databasekald i en løkke, så har du gjort noget galt et sted. Enten i dit skemadesign eller i koden.
Her ser det umiddelbart ud til, at du kan køre en `WHERE tag_id IN (?)` for at få dem alle ud på en gang.
Hvis du skal bruge loops, så er det heller ikke meningen at du laver din prepared statement inde i løkken. Det giver ingen mening at forberede den hver gang.
Jeg har tilpasset '$sql' og 'bind->param' og fjernet 'foreach'.
Jeg får til gengæld kun valideret mod første værdi i arrayen. Skal der foretages tilpasning ved: $tags= ($_POST['tags']); eller andet for at kunne validere mod alle værdier i arrayen???
PS: Du har ret vedr. forberedelse af statement. Jeg havde min aktuelle fokus andetsteds.
Efter dit svar, samt megen googlen, gennemtrævling af stackoverflow, flere forsøg og bedre indsigt har jeg måttet erkende, at in() ikke (umiddelbat i hvert fald) kan anvendes. Jeg får i alle situationer advarslen: "mysqli_stmt::bind_param(): Number of elements in type definition string doesn't match number of bind variables in ..." - selvom jeg sætter 'iii' svarende til et aktuelle antal værdier i $tags.
Jeg har (indtil videre i det mindste) lagt projektet stille og er gået tilbage til: ---- $tags = array(); if (isset ($_POST['tags']) && $_POST['tags'] != "") { $tags = implode(',',($_POST['tags'])); $query = "select distinct dok_id from doktags where tag_id in($tags)"; $result = mysqli_query($db_link, $query) or die(mysqli_error($db_link)); while ($row = mysqli_fetch_assoc ($result)) { echo $row['dok_id']. "<br />"; (midlertidig) } // header ("Location: udtrek.php"); // exit; ----
'Distinct' var den direkte årsag til, at jeg ikke ville anvende 'foreach'.
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.