webForumDet fria alternativet

INNER JOIN med hjälp av array

10 svar · 2 604 visningar · startad av bigsky

bigskyMedlem sedan maj 2002825 inlägg
#1

Jag har ett formulär som genereras dynamiskt beroende på vilken restaurang man har valt. I databasen är det för resp. restaurang sparat vilka fält i formuläret som ska genereras för just den restaurangen. Datan är sparade enligt id,id,id,id osv.

Så här ser min databas ut:

Tabell restaurants:
restaurant_id (unikt id för varje restaurang)
report_fields (vilka fält som ska visas har sparats som t ex. 1,2,14,39,56)

Tabell report:
id (unikt id för just det formulärsfältet)

Antar att det måste till en typ av INNER JOIN för detta?

aasahMedlem sedan mars 20033 451 inlägg
#2

Vad är det du vill åstadkomma egentligen? Din databasstruktur ser lite märklig ut. :q

bigskyMedlem sedan maj 2002825 inlägg
#3

Jag vill skapa ett formulär dynamiskt beroende på innehållet i databasen. Vilka fält som ska synas i formuläret är olika beroende på vilken restaurang man väljer att visa formuläret för. Alla tillgängliga formulärsfält i databasen har ett unikt id. I restaurangernas tabell finns det sparat vilka formulärs id:n som ska synas i det formulär som skapas för just den restaurangen.

T ex. för restaurang 1 ska formulärsfälten 2, 19 och 23 skrivas ut i HTML.

Har då dessa formulärs id:n sparade som 2,19,23 i restaurangernas tabell report_fields.

aasahMedlem sedan mars 20033 451 inlägg
#4

Om du vill ha en relationsdatabas ska du inte spara fälten som en lista, utan som tre rader i det här fallet istället. Dvs, du lagrar en rad med RestID, FieldID per unik kombination av dessa.

Sedan... Jag antar att dina tabeller innehåller mer än id-värden för annars har du inget behov av en JOIN, det tillför ju ingen ny kunskap. Men om din formulärfält tabell innehåller tex (FieldID, name, type....) så behövs det.

Är det alltid samma presentation för en viss restaurang eller har du olika typer av formulär också? För då behöver du fler tabeller.

Du behöver alltså minst:
Restaurant (RestID, RestName, Address, Owner, ...) Eller vad du nu har för kolumner i den
FormField (FFID, FFName, Type, IsMandatory, ....)
RestFormField (RestID, FFID)

Där rest formField innehåller
1, 2
1, 19
1, 23

SELECT * 
FROM 
   Resturant R 
   INNER JOIN RestFormField RFF ON R.RestID = RFF.RestID 
   INNER JOIN FormField FF ON RFF.FFID = FF.FFID
bigskyMedlem sedan maj 2002825 inlägg
#5

Det är alltid samma presentation för en viss restaurang, det finns bara ett formulär. Däremot ska man kunna uppdatera/ändra vilka formulärfält som ska visas.

aasahMedlem sedan mars 20033 451 inlägg
#6

Då håller min lösning ovan.

bigskyMedlem sedan maj 2002825 inlägg
#7

Ok, ska prova med din lösning. Stort tack! :)

bigskyMedlem sedan maj 2002825 inlägg
#8

Det blir ju en hel del poster i tabellen RestFormField för alla olika kombinationer. Nu glöde jag tyvärr nämna det. Men för de flesta restauranger ska alla fält i formuläret skrivas ut. Man skulle inte kunna göra tvärtom, dvs. att RestFormField istället innehåller vilka fält som INTE ska synas för de restauranger som inte alla fält ska visas för? Borde ju minska antalet poster på kombinationer iaf.

Min ursprungliga SQL-fråga såg ut så här. Går den att kombinera med ditt förslag ovan eller med mitt förslag om att ha en tabell med undantag istället?

SELECT * FROM report WHERE category = '$rowGetReportCategory[id]' ORDER BY name_id
bigskyMedlem sedan maj 2002825 inlägg
#9

Ok, jag kör med din lösning ovan markerad som lösning. MEN om jag nu även vill visa t ex. text eller annan data/innehåll som är lagrad i databasen för resp. formulärsfält. Hur ska då SQL-frågan se ut?

Ponera att jag ska generera formuläret för en viss restaurang. De formulär för restaurangen som ska visas, visas helt korrekt enligt din lösning ovan. Nu vill jag arbeta med data från databasen för resp. fält som genererats. Det kan handla om att skapa en ny rad eller uppdatera en befintlig rad i databasen baserat på de synliga formulärsfälten.

Den datan ligger i en annan tabell som heter visits.

bigskyMedlem sedan maj 2002825 inlägg
#10

Någon som kan hjälpa till? Har ganska bråttom :)

bigskyMedlem sedan maj 2002825 inlägg
#11

Nevermind, löste det själv!

Genererad på 376 ms · cache AV · v20260730165559-full.f96bc7eb