Kom-pa-TI-bilitet
php i påsk?
Hej alla,
Har googlat till leda. Mitt hopp står nu till er istället...
Jag skulle vilja ha följande funktion mitt php/mysql projekt:
Varning! för ett mycket krystat exempel...
Anta att jag söker i hela databasen på ordet "elvis". Det resulterar i två träffar. En för Elvis Presley, i kolumnen för LP skivor, och en träff för Elvisp i kolumnen för husgeråd.
Går det att echo:a en tabell med endast dessa svar? Alltså, att det automatiskt genereras en 2-kolumnig tabell (width=auto) med tillhörande kolumnrubriker och under det en rad med nämnda artiklar?
För närvarande har jag en 6-kolumnig tabell med fasta rubriker, fasta kolumnbredder och under det en tabell med svaren från databasen.
Tacksam för tips!
//joglee
Det går men du bör vända lite på det. Om jag förstått ditt scenario rätt har du något liknande detta nu — och har jag missuppfattat det hela behöver du inte läsa mer ;):
Tabell "Saker_Och_Ting":
+-----------+-----------+-----------+-----------+-----------+-----------+
| Kompisar | LP-skivor | Böcker | Husgeråd | TV-spel | Övrigt |
+-----------+-----------+-----------+-----------+-----------+-----------+
| | | | Elvisp | | |
+-----------+-----------+-----------+-----------+-----------+-----------+
| | Elvis | | | | |
+-----------+-----------+-----------+-----------+-----------+-----------+
Om du har något i den stilen har du en dåligt designad databas, tyvärr. Datan kan förvisso sparas i ovanstående format men det blir inte optimalt ur vare sig prestanda- eller användarsynpunkt, då du har 5 redundanta celler för varje rad och dessutom måste söka mot varje fält för att hitta något.
Lösningen är att normalisera databasen. Vad du egentligen vill ha är en tabell för Prylar, och en tabell med Kategorier. På så sätt kan du enkelt och smidigt slå ihop Pryl mot Kategori och få ut precis vad du letar efter.
Tabell "Pryl":
+----+--------+------------+
| Id | Namn | KategoriId |
+----+--------+------------+
| 1 | Elvis | 2 |
+----+--------+------------+
| 2 | Elvisp | 4 |
+----+--------+------------+
Tabell "Kategori":
+----+-----------+
| Id | Namn |
+----+-----------+
| 1 | Kompisar |
+----+-----------+
| 2 | LP-skivor |
+----+-----------+
| 3 | Böcker |
+----+-----------+
| 4 | Husgeråd |
+----+-----------+
| 5 | TV-spel |
+----+-----------+
| 6 | Övrigt |
+----+-----------+
För att hitta pryl + kategori på saker som innehåller "elvis" söker du med:
SELECT Pryl.Namn, Kategori.Namn
FROM Pryl
INNER JOIN Kategori ON (Pryl.KategoriId = Kategori.Id)
WHERE Pryl.Namn LIKE '%elvis%'
ger resultat:
+-----------+---------------+
| Pryl.Namn | Kategori.Namn |
+-----------+---------------+
| Elvisp | Husgeråd |
+-----------+---------------+
| Elvis | LP-skivor |
+-----------+---------------+
Databasen har blivit "normaliserad". Detta har flera fördelar; du kan bland annat välja ut alla Prylar som tillhör en viss kategori (SELECT ... FROM ... WHERE Pryl.KategoriId = 4), du kan räkna hur ofta en sökterm förekommer i databasen (SELECT COUNT(*) FROM ... WHERE Pryl.Name LIKE '%elvis%') osv.
1k TACK!!! Jag förstår nog vad du menar men jag inser också att mitt exempel var ganska uselt. Ett förtydligande är nog på sin plats...
Jag har en databas på ca 10000 poster av noter och notböcker. Tabellen består av ca 30 st kolumner (kategorier), såsom "Titel", "Kompositör", "Textförfattare", "Instrument", "Genre" osv.
Jag vill göra det så enkelt som möjligt för användaren. Oftast fungerar det alldeles utmärkt att söka i hela databasen. T.ex. om jag anger sökordet "McCartney" så får jag upp svar i kolumnen "Kompositör" och ser också på samma rad tillhörande "Titel" och "Samlingsverk". Men jag får ju inget napp i kolumnen för "Titel" eftersom det inte finns någon låt som heter så. Däremot fylls ju titelkolumnen på med de låtar som Paul har gjort.
+-------+--------------+------------------+----------------------+----------------+----------------+
|-Artnr-|----Titel-----|-----Kompositör---|---Samlingsverk-------|--Spelbok fiol--|-Spelbok gitarr-|
+-------+--------------+------------------+----------------------+----------------+----------------|
|-325---|-Lady Madonna-|-Lennon/McCartney-|-The Beatles Complete-|----------------|---Gitarrock!---|
+-------+--------------+------------------+----------------------+----------------+----------------+
|-326---|--Yesterday---|-Lennon/McCartney-|-The Beatles Complete-|-Gnid på! Del 1-|----------------|
+-------+--------------+------------------+----------------------+----------------+----------------+
Att göra en tabell som visar tomma (null) kolumner vill jag undvika utan den bör se ut som ovan.
//joglee
1k TACK!!! Jag förstår nog vad du menar men jag inser också att mitt exempel var ganska uselt. Ett förtydligande är nog på sin plats...
Jag har en databas på ca 10000 poster av noter och notböcker. Tabellen består av ca 30 st kolumner (kategorier), såsom "Titel", "Kompositör", "Textförfattare", "Instrument", "Genre" osv.
Jag vill göra det så enkelt som möjligt för användaren. Oftast fungerar det alldeles utmärkt att söka i hela databasen. T.ex. om jag anger sökordet "McCartney" så får jag upp svar i kolumnen "Kompositör" och ser också på samma rad tillhörande "Titel" och "Samlingsverk". Men jag får ju inget napp i kolumnen för "Titel" eftersom det inte finns någon låt som heter så. Däremot fylls ju titelkolumnen på med de låtar som Paul har gjort.
+-------+--------------+------------------+----------------------+----------------+----------------+
|-Artnr-|----Titel-----|-----Kompositör---|---Samlingsverk-------|--Spelbok fiol--|-Spelbok gitarr-|
+-------+--------------+------------------+----------------------+----------------+----------------|
|-325---|-Lady Madonna-|-Lennon/McCartney-|-The Beatles Complete-|----------------|---Gitarrock!---|
+-------+--------------+------------------+----------------------+----------------+----------------+
|-326---|--Yesterday---|-Lennon/McCartney-|-The Beatles Complete-|-Gnid på! Del 1-|----------------|
+-------+--------------+------------------+----------------------+----------------+----------------+
Att göra en tabell som visar tomma (null) kolumner vill jag undvika utan den bör se ut som ovan.
//joglee
Om jag inte missförstår dig så har den ovan två nullfält; ett på Spelbok fiol coh ett på Spelbok gitarr. Kan du ge vidare exempel på vad din tabell innehåller för kolumner?
Jag är nästan säker på att en normalisering hade varit på sin plats, men det behövs en lite mer avancerad struktur än den jag först föreslog. Det blir mer jobb så klart, men du kommer antagligen tjäna på det i längden och dessutom känna dig duktig
Kom-pa-TI-bilitet
Återigen ett dåligt exempel från min sida, inte minst mitt taffliga försök till en begriplig ASCII-tabell, vilken du ändå tolkade rätt! All heder!
Jag tror nog att databasen är, som du säger, normaliserad. Varje notblad, spelbok etc tilldelas en kategori vid registreringen; en bokstavskombination a'la Biblioteket. Jag har alltså ingen kolumn för gitarrspelböcker, utan de har istället en kod i artikelnumret t.ex GIT-325. Jag kan därför få fram alla gitarrböcker genom att söka i kategorin "GIT". So far so good... Men, jag har en massa kolumner som ofta är "NULL:ade" och som jag därför inte vill ha med i mitt svar. En sökning på ordet "queen" t.ex ger kanske tre träffar;
1. "Utländsk titel"; Dancing Queen med tillhörande "Kompositör"; B.Andersson, "Textförfattare"; B.Ulvaeus.
2. "Samlingsverk innehåll"; Dancing Queen med tillhörande "Samlingsverk"; Vispop 1.
3. "Samlingsverk"; The best of Queen
Jag vill nu kunna generera en tabell med kolumnrubriker baserade på det returnerade svaret. I det här fallet 5 kolumner. Bredden på varje kolumn ska anpassas automatiskt. Ett sätt är ev. att ge varje kolumn 20% (100/5) men i exemplet kanske "Samlingsverk" ska få lite mer bredd eftersom det innehåller det längsta ordet. Har prövat width=auto och det fungerar visserligen på varje enskild svarsrad, men tabellen liknar mer ett trägolv i fallande längder. Svarsrad 1 ger 33% kolumnbredd, rad två 50% och rad 3 100%.
De kolumner som är "NULL:ade" är t.ex "Svensk titel", "Annan titel", "Arrangör", "Genre" för att nämna ett fåtal.
I hopp om fortsatt förståelse...
//joglee
Angående slutresultatet: så länge du inte skapar en ny <table> för varje rad i ditt sökresultat så ska tabellens celler anpassa sig automagiskt efter innehållet. Du ska inte behöva sätta några angivelser förutom själva bredden på tabellen. Detta förutsätter att du anger de kolumner du önskar visa upp i toppen av tabellen.
Som jag förstår det just nu vill du visa ett varierande antal kolumner för varje sökträff där de kolumner som innehåller null plockas bort. Detta skulle innebära att du får generera en ny tabell (<table>) för varje rad i ditt sökresultat, eftersom de med stor sannolikhet har nulls på olika ställen, och då har du egentligen ingen enskild tabell utan en uppsättning rader som inte nödvändigtvis har någonting gemensamt. Att få dem att anpassas efter vissa gemensamma mått är svårt och ingenting jag rekommenderar.
Jag förstår fortfarande inte riktigt hur din databas ser ut och kan ha råkat förvirra begreppen lite i mitt försök att förklara. Ligger allting i en enda stor tabell eller är datan uppdelad på något sätt? Att kategorierna tilldelas en bokstavskombination i administrationsgränssnittet har ingenting att göra med normalisering utan kan rentav tyda på raka motsatsen.
Kom-pa-TI-bilitet
Det är helt rätt uppfattat!
Jag har gjort en fast rubrikrad för mina kolumner...
echo '<h5><i><p style="float: left; width: 5%; text-align: center;">Verksnr</p>
<p style="float: left; width: 40%; text-align: center ;">Titel:</p>
<p style="float: left; width: 15%; text-align: center;">Kompositör:</p>
<p style="float: left; width: 15%; text-align: center;">Textförfattare:</p>
<p style="float: left; width: 25%; text-align: right;">Samlingsverk: </p><br></i></h5><br><hr color=#EEDFCC><br>';
och under den en scrollbar tabell med träffarna (ny färg för varje rad)...
echo "<table style='font-size: 120% 'width='100%' bgcolor='#EEDFCC'>";
if ($bg == "#FFEFDB") $bg = "#EEDFCC";
else
$bg = "#FFEFDB";
echo "<tr>";
echo "<td width='5%' align=center bgcolor='$bg'><strong>" . $result['Verkbeteckning'] , ' ', $result['Nr'] . "</strong></td>";
echo "<td width='40%' align=center bgcolor='$bg'>" . $result['Svensk_titel'], ' ', '<br>', $result['Utlandsk_titel'], ' ', '<em><br>', $result['Annan_titel'], ' ' . "</em></td>";
echo "<td width='15%' align=center bgcolor='$bg'>" . $result['Kompositor'] . "</td>";
echo "<td width='15%' align=center bgcolor='$bg'>" . $result['Författare'] . "</td>";
echo "<td width='25%' align=right bgcolor='$bg'><em>" . $result['Samlingsverkstitel'], ' ' . "</em></td>";
echo "</tr>";
echo "</table>";
Jag har alltså dolt hela sidan scrollbar och istället tilldelat tabellen en scrollist. De fasta kolumnrubrikerna gör att man alltid kan se dem oavsett vart i tabellen man tittar, man ser också frågan och de urval man gjort överst på sidan. Min tanke var annars om det går att bland de aktuella träffarna göra något i stil med... SELECT ALL Columns WHERE Result >NULL, sedan skapa en rubrik efter det, procentuellt uppdelad beroende på antalet kolumner.
F ö är databasen från början gjord i MS Access så jag har importerat den till Mysql. Strukturen är 1 stor tabell med ett 30-tal kolumner. Visst har den sina brister men i stora drag så tycker jag den är upplagd på ett logiskt sätt.
Skönt att ha förklaringarna ur världen
Min tanke var annars om det går att bland de aktuella träffarna göra något i stil med... SELECT ALL Columns WHERE Result >NULL, sedan skapa en rubrik efter det, procentuellt uppdelad beroende på antalet kolumner.
F ö är databasen från början gjord i MS Access så jag har importerat den till Mysql. Strukturen är 1 stor tabell med ett 30-tal kolumner. Visst har den sina brister men i stora drag så tycker jag den är upplagd på ett logiskt sätt.
Det är raderna i en databas som håller datan, inte kolumnerna.
+-----+-----+-----+-----+
| A | B | C | D |
+-----+-----+-----+-----+
| | 1 | 2 | 3 |
+-----+-----+-----+-----+
| 4 | | 5 | 6 |
+-----+-----+-----+-----+
| 7 | 8 | | 9 |
+-----+-----+-----+-----+
| 10 | 11 | 12 | |
+-----+-----+-----+-----+
Om det hade varit möjligt att plocka ut de kolumner som inte har NULL-värde så hade vi inte fått ett smack ur vår tabell, eftersom samtliga kolumner innehåller en tom cell på någon rad. Vet du med dig att vissa kolumner kan hålla null kan du låta bli att specificera dom i din SELECT-sats naturligtvis.
En obalanserad databas är ofta lättläst men svårfrågad och ett fanskap att uppdatera, tyvärr. Du kommer alltid att få nullfält på fiolspelböcker där du har ett artikel-id som börjar med GIT (gitarrspelbok), och vice versa. Detta är ett tydligt tecken på att artiklarna borde separeras upp på något sätt, särskilt eftersom fältet "Spelbok fiol" är helt ologiskt för en rad som säger sig innehålla en gitarrartikel.
Om du tänker igenom strukturen och delar upp artiklarna så att en rad tillhör en viss TYP av artikel så slipper du redundansen och får dessutom en mycket effektivare struktur.
Artikeltyp
+----+-------------------+
| Id | Namn |
+----+-------------------+
| 1 | Spelbok, gitarr |
+----+-------------------+
| 2 | Spelbok, fiol |
+----+-------------------+
| 2 | Spelbok, näsflöjt |
+----+-------------------+
Artikel
+----+--------------+-----------------------+
| Id | ArtikeltypId | Namn |
+----+--------------+-----------------------+
| 1 | 1 | Gitarr för nybörjare. |
+----+--------------+-----------------------+
| 2 | 1 | Mer gitarr! |
+----+--------------+-----------------------+
| 3 | 3 | Vad är det som låter? |
+----+--------------+-----------------------+
SELECT Artikel.Namn AS Artikelnamn, Artikeltyp.Namn AS Artikeltyp
FROM Artikel
INNER JOIN Artikeltyp ON(Artikel.ArtikeltypId = Artikeltyp.Id)
WHERE ArtikeltypId = 1
eller varför inte:
WHERE Artikel.Namn LIKE '%gitarr%'
ger:
+-----------------------+-----------------+
| Artikelnamn | Artikeltyp |
+-----------------------+-----------------+
| Gitarr för nybörjare. | Spelbok, gitarr |
+-----------------------+-----------------+
| Mer gitarr! | Spelbok, gitarr |
+-----------------------+-----------------+
Vid första anblick ser det mycket mindre överskådligt ut (vad tusan är 3 för artikeltyp?!) men det ger dig många fördelar. Vill du exempelvis lägga till en viss typ av artikel är det bara att inserta den i Artikeltyp.
Framför allt undviker du problem med nullfält, i och med att vi i princip har slagit ihop alla dina kolumner "Spelbok, <något>" till en enda kolumn "Artikeltyp" som garanterat alltid har ett värde.
Om du är bekvämare med text som ID:n går det naturligtvis bra att ange WHERE ArtikeltypId = 'GITARR' istället för 1, förutsatt att du designat dina tabeller på det viset.
Att den är gjord i MS Access är inget dåligt, jag tycker nästan det är lättare att designa databaser där än manuellt.
Kom-pa-TI-bilitet
OK.
Jag uppskattar verkligen dina informativa och pedagogiska svar. Tack!
Tyvärr får jag nog ta på mig att jag farit med osanning. I min iver att ge exempel på vad jag menar råkade jag ange både Spelbok Gitarr och Spelbok fiol som kolumner. Så är inte fallet. De är naturligtvis inlagda med var sitt "ArtikeltypId" precis som du menar. Det finns ganska många ArtikeltypId. Alla fiolböcker har t.ex ArtikeltypId PAY följt av ett löpnr. Gitarrböckerna heter RAZ etc.
Om jag exempelvis registrerar en ny spelbok för gitarr så anger jag RAZ i kolumnen för "Verkbeteckning", vilket är databasens namn för "ArtikeltypId". Till det anges ett "Löpnummer". Därefter "Samlingsverkstitel"; Gitarrbus 2 samt "Samlingsverkstitel_innehåll" där låtarna i boken anges (åtskilda av radbyte?!?). "Svensk titel", "Utländsk titel", "Annan titel", "Kompositör", "Textförfattare" etc anges inte och blir därför NULL.
Om man sedan gör en sökning (i hela tabellen) på t.ex "Smoke on the water" då får man en träff i "Samlingsverkstitel_innehåll"; Smoke on the water med tillhörande kolumner på första raden
Andra raden kanske visar "Utländsk titel"; Smoke on the water, "Kompositör" etc.
Tredje raden visar någonting annat osv.
Men INGEN rad visar t.ex "Svensk titel" vilket gör att den känns överflödig att ha med. Man skulle visserligen kunna göra ett urval INNAN sökningen men då försvinner, tycker jag, hela poängen med ett lättanvänt system. Hellre då ett "hagelskott i mörkret" som kanske ger lite för många träffar, men att man därefter kanske väljer det urval man vill ha.
En variant (om det finns någon sådan funktion) skulle kanske vara att automatiskt skapa en ny tillfällig tabell i MySQL med bara svaren och dess kolumner, eller?
Du har sagt att din databas består av EN tabell med 30 kolumner. Detta stämmer alltså inte? I sådana fall förstår jag inte vad problemet är tyvärr.
Kom-pa-TI-bilitet
Hoppla,
Jag har 1 st databas som innehåller 1st tabell som i sin tur innehåller 30 st, låt säga, vågräta kolumner. I denna tabell ligger det (lodrätt) 10.000 poster. För mig kan det liknas med ett stort kalkylblad på 30.000 celler.
Nåväl, till pudelns kärna, frågan som jag haft så svårt att haspla ur mig...
Går det, genom att fråga HELA databasen, få fram en tabell där endast kolumner med ifyllda värden visas? Alltså, precis som du nämnde tidigare, en tabell som anpassas beroende på vilken fråga som ställts, eller kanske rättare sagt, vilket svar som returneras?
Hoppla,
Jag har 1 st databas som innehåller 1st tabell som i sin tur innehåller 30 st, låt säga, vågräta kolumner. I denna tabell ligger det (lodrätt) 10.000 poster. För mig kan det liknas med ett stort kalkylblad på 30.000 celler.
Nåväl, till pudelns kärna, frågan som jag haft så svårt att haspla ur mig...
Går det, genom att fråga HELA databasen, få fram en tabell där endast kolumner med ifyllda värden visas? Alltså, precis som du nämnde tidigare, en tabell som anpassas beroende på vilken fråga som ställts, eller kanske rättare sagt, vilket svar som returneras?
Ursäkta men jag förstår bara mindre och mindre av vad du säger. Vågräta kolumner?
Om du vill visa varje kolumn individuellt behöver du ställa trettio frågor mot tabellen, en för varje kolumn, och välja att endast hämta de värden som inte är NULL.
Men — och för att poängtera hur viktigt detta är använder jag fetstilt: du vill inte göra detta. Resultatet kommer inte ha något relevans, du kommer inte kunna rada upp resultaten bredvid varandra och få ett förståligt resultat eftersom de inte längre kommer tillhöra samma rad. Detta eftersom den inneboende ordningen går förlorad. Du har inte ens ett ID att sortera resultatet på då det ligger i en egen kolumn.
Jag återanvänder ett exempel:
EnTabell
+-----+-----+-----+-----+-----+
| id | a | b | c | d |
+-----+-----+-----+-----+-----+
| 1 | | 1 | 2 | 3 |
+-----+-----+-----+-----+-----+
| 2 | 4 | | 5 | 6 |
+-----+-----+-----+-----+-----+
| 3 | 7 | 8 | | 9 |
+-----+-----+-----+-----+-----+
| 4 | 10 | 11 | 12 | |
+-----+-----+-----+-----+-----+
Genom queryn:
SELECT a
FROM EnTabell
WHERE a IS NOT NULL
ges resultatet
3 rows returned:
+-----+
| a |
+-----+
| 4 |
+-----+
| 7 |
+-----+
| 10 |
+-----+
Observera att raderna inte garanteras i den ordning som de ligger i originaltabellen.
Sedan:
SELECT b
FROM EnTabell
WHERE b IS NOT NULL
3 rows returned:
+-----+
| b |
+-----+
| 1 |
+-----+
| 8 |
+-----+
| 11 |
+-----+
Du har nu all data från två kolumner, exklusive NULL.
Denna data är värdelös.
All data som hör samman i en tabell ska ligga på en enda rad. I vårt resultat har vi inte längre några logiska rader. Värde 1 och 4 låg ursprungligen på varsin rad men har av en slump hamnat högst upp i bägge utvalda kolumner. Istället för siffrorna 1 och 4 kan du tänka dig "Madonna" och "Sgt. Pepper's Lonely Heart Club Band", ifall rad 1 i EnTabell ursprungligen innehöll data för Best of 90's och rad 2 en Beatles-samling.
Din databas är feldesignad och du använder den på ett felaktigt sätt, det är det som är problemet. Kolumner är inte tänkta att plockas ut styckvis som du önskar göra. Visst går det, men det kommer vara minst 29 ggr långsammare än en korrekt lösning och ge dig ett resultat du med stor sannolikhet inte kan göra något med.
Om du istället gör:
SELECT a, b, c, d
FROM EnTabell
WHERE a IS NOT NULL
AND b IS NOT NULL
AND c IS NOT NULL
AND d IS NOT NULL
... kommer du få noll rader som resultat, vilket jag antar är lika icke-önskvärt.
Kom-pa-TI-bilitet
Självklart är kolumner lodräta. Fel av mig. Jag menade att kolumnrubrikerna är placerade vågrätt.
Har hittat lite spännande läsning om hur databaser bör vara uppbyggda vilket jag ska studera, men det har inte hindrat mig från att försöka lösa problemet. Hjärnan går på högvarv. Det är lite som att lösa korsord och jag lär mig ständigt nya saker, kul!
Jag tror, och hoppas att denna lösning fungerar:
1. En temporär tabell skapas CREATE T2 LIKE T1 (vilket kopierar strukturen från originaltabellen)
2. En fråga ställs till originaltabellen ( hela databasen ).
3. Svaret stoppas in i den temporära tabellen ( INSERT INTO T2...)
4. Genom en IF sats summeras kolumnerna i den temporära tabellen (SUM COL...) och jämförs med NULL ($col!=NULL), alltså om summan av kolumnens värde är annat än NULL, dvs kolumnen har minst ett värde i någon cell så echo:as kulumnrubriken
5. En <table> med resultaten skapas enligt samma principer som punkt 4.
6, Den temporära tabellen tas bort.
Vad tror du, kan det fungera?
Självklart är kolumner lodräta. Fel av mig. Jag menade att kolumnrubrikerna är placerade vågrätt.
Har hittat lite spännande läsning om hur databaser bör vara uppbyggda vilket jag ska studera, men det har inte hindrat mig från att försöka lösa problemet. Hjärnan går på högvarv. Det är lite som att lösa korsord och jag lär mig ständigt nya saker, kul!
Jag tror, och hoppas att denna lösning fungerar:
1. En temporär tabell skapas CREATE T2 LIKE T1 (vilket kopierar strukturen från originaltabellen)
2. En fråga ställs till originaltabellen ( hela databasen ).
3. Svaret stoppas in i den temporära tabellen ( INSERT INTO T2...)
4. Genom en IF sats summeras kolumnerna i den temporära tabellen (SUM COL...) och jämförs med NULL ($col!=NULL), alltså om summan av kolumnens värde är annat än NULL, dvs kolumnen har minst ett värde i någon cell så echo:as kulumnrubriken
5. En <table> med resultaten skapas enligt samma principer som punkt 4.
6, Den temporära tabellen tas bort.
Vad tror du, kan det fungera?
Det låter överkomplicerat. Om du vet att en kolumn alltid har null så behöver du inte ta med den i din SELECT. Istället för SELECT * FROM ... kör du alltså
SELECT knatte, fnatte, tjatte
FROM megatabell
där du sedan innan vet att knatte, fnatte och tjatte inte innehåller några nulls.
Ska du kolla varenda rad i databasen efter null på specifika kolumner och välja bort dem därefter får du göra flera frågor. Det är som sagt inte så databasen är tänkt att användas. Du kan dessutom inte summera fält som inte innehåller numeriska värden.
Kom-pa-TI-bilitet
Skam den som ger sig. Nu har jag äntligen fått det att fungera! Klockrent dessutom! Just som jag lärt mig att göra temporära tabeller etc så kom jag på en mycket enklare lösning:
1. En fråga ställs till databasen
2. Svaren körs sedan genom en foreach loop. Där har jag lagt en if sats;
IF $result!=NULL {
$kolumnrubrik++;
}
Alltså om någon cell i svarskolumnen har något värde adderas $kolumnrubrik med 1.
3. En tabell (för kolumnrubriker) ritas upp med ännu en if sats;
IF $kolumnrubrik!=NULL {
echo "KOLUMNRUBRIK"
}
4. Svaren körs återigen genom en foreach loop.
IF $kolumnrubrik!=NULL {
echo $result;
}
Nu är jag trött...
- Igår Nvidia: "Energieffektiva RTX 4060 sparar hundralappar" 36
- Igår MSI Geforce RTX 4060 Ventus 2X OC – bra prestanda vid 1080p men medioker kylare 45
- Igår Noctua släpper monteringsram för "deliddade" Ryzen 7000-processorer 15
- Igår Nvidias nästa arkitektur för Geforce kommer år 2025 58
- 27 / 6 Afox släpper kompakt Geforce RTX 4090 36
- Igår Veckans fråga: Vilket operativsystem föredrar du? 78
- Igår Bilar med smarta inslag ger fler dumma fel 58
- 27 / 6 Telekombranschen: "Smarta glasögon ersätter telefoner inom fem år" 88
- 26 / 6 Lastpass-användare rasar – kan inte logga in 59
- 26 / 6 Inet frågar SweClockers – Vad skulle du vilja förbättra på Inet.se? 53
- Veckans fråga: Vilket operativsystem föredrar du?79
- Fel post (dödsbo)9
- Vilken serie såg du senast?1253
- Kommer flytta till stan och mitt wifi kommer säkert synas av hundratals människor varje dag. Vilken router ska jag köpa och hur ska den ställas in?7
- Dator från Inet (30k~)1
- Bildvisnings program6
- Krönika: Teknikutvecklingen avstannar – men det gör också uppgraderingsbehovet67
- Starfield utvecklas med AMD:s välsignelse148
- Fästingar.2
- Vad lyssnar du på just nu?12615
- Säljes LG 27'' UltraGear 27GP950 4K Nano IPS 160 Hz HDMI 2.1
- Säljes Star Wars Jedi AMD kod
- Säljes Trasig Xiaomi Mi Electric Scooter (M365) Svart
- Säljes 5800x3D + x570 Meg Unify + be quiet! Dark Rock Slim
- Säljes AMD ASUS DUAL RX6700XT
- Säljes Dell OptiPlex 7010
- Säljes Datordelar: i5 9600k + 1070 GTX mm.
- Säljes 1080 TI | Vattenblock | 1TB SSD | Apple Watch 4 Stainless | Hörlurar | Mikrofon
- Säljes Intressekoll: Xbox Series S 512Gb samt Switch Oled 64Gb Vit
- Säljes Gamingdator RTX 3090, i9-10900K, 32GB ram
- Nvidia: "Energieffektiva RTX 4060 sparar hundralappar"36
- MSI Geforce RTX 4060 Ventus 2X OC – bra prestanda vid 1080p men medioker kylare45
- Veckans fråga: Vilket operativsystem föredrar du?79
- Bilar med smarta inslag ger fler dumma fel58
- Noctua släpper monteringsram för "deliddade" Ryzen 7000-processorer15
- Nvidias nästa arkitektur för Geforce kommer år 202558
- Microsoft vill strömma Windows från molnet71
- Starfield utvecklas med AMD:s välsignelse148
- Telekombranschen: "Smarta glasögon ersätter telefoner inom fem år"88
- En av tre svenskar använder annonsblockerare79
Externa nyheter
Spelnyheter från FZ
- Alan Wake och CoD: Kallt krig snart på PS Plus, enligt läcka igår
- Red Dead Redemption åldersmärkt igen i Korea – det spekuleras i remaster igår
- Fallout London flyttas för att slippa Starfield-konkurrensen igår
- Minecraft-filmen kan ha hittat sin Steve – Pedro "The Last of Us-Joel" Pascal igår
- Stor Diablo IV-patch släppt, mer XP och ombalanserade klasser igår