Meddelande

Minska
No announcement yet.

INNER JOIN med hjälp av array

Minska
X
 
  • Filter
  • Klockan
  • Show
Clear All
new posts

  • INNER JOIN med hjälp av array

    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?

  • #2
    Vad är det du vill åstadkomma egentligen? Din databasstruktur ser lite märklig ut.

    Kommentera


    • #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.

      Kommentera


      • #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

        sql:

        SELECT *
        FROM
        Resturant R
        INNER JOIN RestFormField RFF ON R.RestID = RFF.RestID
        INNER JOIN FormField FF ON RFF.FFID = FF.FFID

        Kommentera


        • #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.

          Kommentera


          • #6
            Då håller min lösning ovan.

            Kommentera


            • #7
              Ok, ska prova med din lösning. Stort tack!

              Kommentera


              • #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?

                PHP-kod:
                SELECT FROM report WHERE category '$rowGetReportCategory[id]' ORDER BY name_id 
                Last edited by bigsky; 2013-07-15, 14:18.

                Kommentera


                • #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.

                  Kommentera


                  • #10
                    Någon som kan hjälpa till? Har ganska bråttom

                    Kommentera


                    • #11
                      Nevermind, löste det själv!

                      Kommentera

                      Working...
                      X