webForumDet fria alternativet

Recept

5 svar · 327 visningar · startad av Gaski

GaskiMedlem sedan juni 2000310 inlägg
#1

Jag ska skapa en recept-databas.
Hade tänkt mig följande upplägg.:

Fält1: IDnummer
Fält2: Recept
Fält3: ? nu kommer det svåra!
Ingredienserna, meningen är att man ska t.ex. kunna skriva in vad man har för livsmedel och sedan ska scriptet ta ut vilka recept som går att laga med dem livsmedlena.

Jag söker alltså ett bra upplägg för en sådan här databas...

LarsGMedlem sedan dec. 200012 464 inlägg
#2

De Ingredienser som skall vara sökbara lagrar du i en separat tabell.

recept
--------
id int primary key auto_increment
namn varchar(30)
beskrivning memo

ingredienser
---------------
id int primary key counter
namn varchar(30)

receptIngredienser
-----------------------
receptid int foreign key references recept(id)
ingrediensid int foreign key references ingredienser(id)
kvantitet

Om du gör det på ditt vis så är det så besvärligt att ändra och söka.

select r.namn  from recept r inner join receptingredienser on id = receptid 
  inner join ingredienser i on ingrediensid = i.id
        where i.namn in ('Gåslever','Lingonsylt')
     group by r.namn,r.id having count(*) = (select count(*)
       from receptingredienser where receptid = r.id)

Det är för att få fram de recept där det räcker med en delmängd av de nämnda ingredienserna.

Eller är syftet att du vill kunna utnyttja alla ingredienser?

Vilka frågor vill du kunna ställa mot databasen utöver denna?

GaskiMedlem sedan juni 2000310 inlägg
#3

Bra lösning!
Hur gör man relations i phpMysql?

Måste man ha dem relaterande för att köra en inner join?

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Nej, relationer behövs inte för att göra join. Det är ändå bra att använda relationer (foreign keys) för att kontrollera att man har korrekta värden i sina tabeller.

Om mna använder tabelltypen INNODB så går det att använda foreign keys i Mysql.

GaskiMedlem sedan juni 2000310 inlägg
#5

När jag kör din sql-sats får jag svaret:
You have an error in your SQL syntax near 'select count(*) FROM receptingredienser where receptid = r.id)

Vad är fel?

LarsGMedlem sedan dec. 200012 464 inlägg
#6

Felet är väl att du använder mysql ;)

Mysql klarar inte av frågor med subselect. Jag kommer inte på någon generell lösning för tillfället. Jag funderar lite.

129 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)