Kan hända att detta inte är möjligt med enbart mysql, men om det är det skulle det underlätta mycket för mig. ...och den här designen är förstås rätt besvärlig och "anti-rdb". Jag antar att det är dynamiska formulär du gör? Tack för svaret, ja det är dynamiska formulär som är anledningen att jag måste använda en sån här struktur. Oj, det kommer bli fruktansvärt dålig performance på det där. du kan ju själv räkna på hur många SELECTs somkommer att köras bara för att visa ett enkelt formulär... Koden körs inte när ett formulär visas, utan endast när man vill titta på datat från formuläret vilket endast administratörerna gör, så koden kommer inte att köras särskilt ofta. Alltså kör du med "min kod" och hanterar null-värden ordentligt, eller med Henriks kod, och gör något i stil med:Vill få ut 4 tabeller som en
Jag har 4 tabeller som heter:
Rows
Columns
Data
Form
Varje rad och kolumn har ett form_id som är en referens till en post i tabellen "form".
Varje rad i data har ett row_id och ett column_id som är referenser till respektive tabell.
Jag skulle nu vilja skriva en sqlsats som ger detta eller liknande resultat:
<code>
Namn Ålder Meddelande
Pelle 18 hej
Lisa 23 fint väder idag
</code>
när tabellerna har värdena:
Columns:
<code>
column_id form_id column_name
1 1 Namn
2 1 Ålder
3 1 Meddelande
</code>
Form
<code>
form_id
1
</code>
Rows
<code>
row_id
1
2
</code>
Data
<code>
data_id column_id row_id value
1 1 1 Pelle
2 2 1 18
3 3 1 hej
4 1 2 Lisa
5 2 2 23
6 3 2 fint väder idag
</code>Sv: Vill få ut 4 tabeller som en
Det du ska göra är ju någon slags pivotering. Just i MySQL är jag inte säker på vad som existerar, men grundprincipen är ju ändå väldigt lätt;
SELECT row_id, Data1.Value, Data2.Value, ...
FROM rows
LEFT JOIN (SELECT * FROM Data WHERE Column_ID=1) As Data1 ON rows.Row_Id = Data1.Row_Id
LEFT JOIN (SELECT * FROM Data WHERE Column_ID=2) As Data1 ON rows.Row_Id = Data2.Row_Id
LEFT JOIN (SELECT * FROM Data WHERE Column_ID=3) As Data1 ON rows.Row_Id = Data3.Row_Id
...
Kan du bara loopa igenom kolumnerna och skapa sql efterhand på något sätt borde det vara enkelt.Sv:Vill få ut 4 tabeller som en
Jag löste det på ett något osmidigare sätt än jag först planerat. Jag kör först en select för att få alla rows och loopar sedan igenom dem med php och hämtar values för varje rad.Sv: Vill få ut 4 tabeller som en
Vad är problemet egentligen? du kan ju selecta allt från tabellen, det räcker ju:
SELECT Data.value, Data.row_id
FROM columns INNER JOIN
Data ON columns.column_id = Data.column_id
WHERE (Data.form_id = 1)
ORDER BY Data.row_id, Data.column_id
sen loopar du bar igenom den koden och håller koll på när row_id ändras, då skriver du ut en radbrytning på sidan.Sv:Vill få ut 4 tabeller som en
Det som komplicerar det lite är att man t.ex. kan ta bort och lägga till fält i formuläret = nya kolumner. Så varje rad har inte alltid exakt samma fält.Sv: Vill få ut 4 tabeller som en
for each row{
for(i = 1; i<max_column; i++){
if(reader.column = i){
print col
reader.readnext
}
}
}