Avatar billede DonTorro Nybegynder
10. maj 2010 - 20:38 Der er 12 kommentarer og
1 løsning

Tøm køleskabet :/

Hej

Jeg har lavet en side hvor man vælger 1-100 ingredienser og trykker submit, hvorefter siden skal vise hvilke madopskrifter man kan lave..

Dem man har alle ingredienserne til skal selfølgelig komme først..

Hvordan laver jeg sådan en mysql-forspørgsel?
Avatar billede arne_v Ekspert
10. maj 2010 - 20:59 #1
Hvordan er opskrifternes ingredient liste gemt?
Avatar billede DonTorro Nybegynder
10. maj 2010 - 21:17 #2
oh ja, det glemte jeg

Tabelnavn: op_ingredienser
Feltnavn:  ingrediens_id | ingrediens_navn | opskrift_id

Tabelnavn: opskrift
Feltnavn:  opskrift_id | opskrift_navn | brugernavn | beskrivelse
Avatar billede arne_v Ekspert
11. maj 2010 - 03:20 #3
SELECT *
FROM opskrift
WHERE opskrift_id IN (SELECT opskrift_id FROM op_ingredienser WHERE ingrediens_navn = X)
AND opskrift_id IN (SELECT opskrift_id FROM op_ingredienser WHERE ingrediens_navn = Y
AND opskrift_id IN (SELECT opskrift_id FROM op_ingredienser WHERE ingrediens_navn = Z)

skal opbygges dynamisk efter antal valgte ingerdienser - her vist med 3.
Avatar billede DonTorro Nybegynder
11. maj 2010 - 09:42 #4
cool cool! :) det virker .. men den vælger dog kun en opskrift?

ville det være dumt at lave :
if ($ingrediens_antal == 3){
$sql = SELECT *
FROM opskrift
blabla.
}
?

for så skal man jo lave den rimelig mange gange :P
Avatar billede arne_v Ekspert
11. maj 2010 - 19:38 #5
Hvis der er flere som kan bruges saa boer de ogsaa blive returneret.

Jeg forestiller mig at du opbygger din $sql variabel alt efter hvor mange felter der er udfyldt.
Avatar billede DonTorro Nybegynder
11. maj 2010 - 19:55 #6
Fik det lige til at virke nu.. men nu udskriver den samme opskrifter 2 gange

if(isset($_POST['Submit'])){
    if(is_array($_POST['checkbox'])){
                foreach($_POST[checkbox] as $key => $val){
                "$key: $val<br />";
        $new_array[$key] = $val;
        $ingrediens_antal = count($new_array);

for ($i = 0; $i < $ingrediens_antal; $i++) {

$sql = "SELECT * FROM opskrift
WHERE opskrift_id IN (SELECT opskrift_id FROM op_ingredienser WHERE ingrediens_navn = '$new_array[$i]')
AND opskrift_id IN (SELECT opskrift_id FROM op_ingredienser WHERE ingrediens_navn = '$new_array[$i]')
AND opskrift_id IN (SELECT opskrift_id FROM op_ingredienser WHERE ingrediens_navn = '$new_array[$i]')";
}
$result = mysql_query($sql);
    while ($row = mysql_fetch_array($result)) {
        if (mysql_num_rows($result)<=0) {
            echo "Intet resultat";
        }
        echo "<a href='vis.php?opskrift_id=".$row['opskrift_id']."'>".$row['opskrift_navn']."</a><br />";
    }
        }
    }
    else{
        echo "Der skete en fejl, prøv venligst igen";
    }
}
Avatar billede arne_v Ekspert
11. maj 2010 - 20:29 #7
Du skal vel kun tilfoeje en enkelt betingelse for hver angivet - ikke 3 !?!?
Avatar billede arne_v Ekspert
11. maj 2010 - 20:30 #8
noget a la:

$sql = "SELECT * FROM opskrift
WHERE opskrift_id IN (SELECT opskrift_id FROM op_ingredienser WHERE ingrediens_navn = '$new_array[0]')

for ($i = 1; $i < $ingrediens_antal; $i++) {
    $sql .= " AND opskrift_id IN (SELECT opskrift_id FROM op_ingredienser WHERE ingrediens_navn = '$new_array[$i]')";
}
Avatar billede arne_v Ekspert
11. maj 2010 - 20:30 #9
Der mangler saa "; efter det foerste saetning.
Avatar billede DonTorro Nybegynder
12. maj 2010 - 09:48 #10
nice.. :)
Kan jeg spørge om en ting mere? selv om det ikke har noget med mysql at gøre ?

har set mig blind på alle de while/if/for løkker :D hehe

Men jeg prøvet at få den til at udskrive opskrift_navn og ingredienser nedenunder, det går også fint..
men hvis jeg f.eks. vil lave alle ingredienser de har i køleskabet røde, så vælger den kun den [0]

while ($row = mysql_fetch_array($result)) {
        if (mysql_num_rows($result)<=0) {
            echo "Intet resultat";
        }   
        echo "<a href='drink_vis.php?opskrift_id=".$row['opskrift_id']."'>".$row['opskrift_navn']."</a><br />";
       
       
        $sqli = "SELECT * FROM op_ingredienser where opskrift_id = '$row[opskrift_id]'";
        $resulti = mysql_query($sqli);
            for ($i = 0; $i < $ingrediens_antal; $i++) {
                while ($row = mysql_fetch_array($resulti)) {
           
                    if ($row['ingrediens_navn'] == $new_array[$i]) {
                        echo "<span style='font-size: 11px; color: red;'>$row[ingrediens_navn],</span> ";                   
                    }else{
                   
            echo "<span style='font-size: 11px;'>$row[ingrediens_navn],</span> ";
            }
                }
            }
            echo "<br />";
        }
        }
    } else{
        echo "Der skete en fejl, prøv venligst igen";
    }


Bare lig svar, og igen , mange tak for hjælpen
Avatar billede arne_v Ekspert
12. maj 2010 - 17:00 #11
Den kode kan jeg ikke helt gennemskue.

For løkken udenom while løkken ser meget forkert ud !
Avatar billede arne_v Ekspert
12. maj 2010 - 17:00 #12
og et svar
Avatar billede DonTorro Nybegynder
13. maj 2010 - 23:30 #13
tusind tak for hjælpen!! :)
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
Computerworld tilbyder specialiserede kurser i database-management

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