Permalänk

Dropdownmeny = SQL filter m.m.

Hej

Jag har gjort en hemsida vars syfte är att efter en droppdown meny (DM) sortera eller filtrera ut resultat från en SQL databas. I dm har jag olika alternativ eller filter och meningen är att när jag valt så ska denna resultera i att tabellen sorteras om och bara visar det som jag väljer enligt de dm jag har.

Koden för att komma åt SQL db:
try

{ $fssqlconn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); // set the PDO error mode to exception $fssqlconn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $error) { echo "Anslutning misslyckades, kalla på Fredrik!" . $error->getMessage(); }

Tar ut datan ur db till DM görs enligt nedanstående kod:

try { $shfilterlan = 'SELECT lan FROM sokning'; $qlan = $fssqlconn->query($shfilterlan); $qlan->setFetchMode(PDO::FETCH_ASSOC); } catch (PDOException $perrorlan) { die("Kunde inte upprätta en anslutning till $dbname" . $perrorlan->getMessage()); }

Den uttagna sql datan hanteras via koden:

<select id='optionshfilterlan' onchange='insertformlan()'> <?php // Presenterar datan enligt en loop while ($rlan = $qlan→fetch()): // Presenterar vald SQL data efter vald placering echo "<option>" . htmlspecialchars($rlan['lan']) . '<br>' . "</option>"; // Slut på loop endwhile; ?> </select> <input type="text" id="mittvallan" name="formvallan" placeholder="Välj">

Ett DM skapas och i den kör en while loop där vald sql data plockas in och presenteras i DM. Formuläret (<input type="text" id="mittvallan" name="formvallan" placeholder="Välj">) behövs egentligen inte men mer om det senare!

Insertformlan() i DM koden aktiverar ett javaskript, vars syfte är att placera det jag väljer i formuläret med ( formvallan), enligt:

function insertformlan() { var selectedlan=document.getElementById("optionshfilterlan"); document.getElementById("mittvallan").value=selectedlan.options[selectedlan.selectedIndex].text;} }

Fråga:
1 -
Om man inte vill ha javaskriptet och formuläret så kan man väll hoppa (mittvallan) och gå direkt via (optionshfilterlan)?

Antar att jag inte använder formuläret och använder (optionshfilterlan)!

Koden för attt hämta ut data ur DB enligt nedan:

try { $selectsokningsdb = 'SELECT id, stiftelse, lan, kommun FROM sokning''; $qshowselect = $fssqlconn->query($selectsokningsdb); $qshowselect->setFetchMode(PDO::FETCH_ASSOC); } catch (PDOException $perrordb) { die("Kunde inte upprätta en anslutning till $dbname" . $perrordb>getMessage()); }

Fråga:
2-
Har för mig att det är i ”SELECT” satsen som man ska länka samman det jag väljer i DM och det som ska plockas ut från DB?
Om det är något oklart så fråga

Jag är nog rätt nära en lösning men behöver hjälp sista biten och ha tålamod, är rätt ny på detta med SQL

Tack på förhand//
Mvh Fredrik

Visa signatur

Computer: Windows 10, 64-bit, Intel i9 - 10850K, Asus Rog MAXIMUS XII HERO (WI-FI), 32GB RAM, Asus RTX3070

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S. 

Permalänk
Medlem

@freddehboy:
Har inte en susning om det andra, men för fråga 2:

$selectsokningsdb = 'SELECT id, stiftelse, lan, kommun FROM sokning'';

Det efter "=" är ju din SQL query.

Generellt SELECT column1,column2 FROM Table (WHERE något om du nu vill det) och ytterligare SQL kommandon, exempelvis för att joina tabeller med mera.
Så i ditt fall så bör din databas innehålla en tabell med namnet sokning.

Låt oss låtsas att du har en tabell som heter Course där kolumnen CourseCode är primary key så kan du exempelvis köra

SELECT CourseName, Teacher FROM Course WHERE CourseCode = (någon CourseCode från input)

och då returnerar den information om den specifika kursen.

CourseName: Fysik A
Teacher : S.Clockers

Medan

SELECT CourseCode, CourseName FROM Course WHERE Teacher = 'S.Clockers'

returnerar kurskod och kursnamn för alla de kurser som S.Clockers undervisar i.

Vet inte alls om det var syntaxen du undrade över men är nog i princip det jag kan bidra med till denna tråd

Permalänk
Skrivet av NoToes:

@freddehboy:
Har inte en susning om det andra, men för fråga 2:

$selectsokningsdb = 'SELECT id, stiftelse, lan, kommun FROM sokning'';

Det efter "=" är ju din SQL query.

Generellt SELECT column1,column2 FROM Table (WHERE något om du nu vill det) och ytterligare SQL kommandon, exempelvis för att joina tabeller med mera.
Så i ditt fall så bör din databas innehålla en tabell med namnet sokning.

Låt oss låtsas att du har en tabell som heter Course där kolumnen CourseCode är primary key så kan du exempelvis köra

SELECT CourseName, Teacher FROM Course WHERE CourseCode = (någon CourseCode från input)

och då returnerar den information om den specifika kursen.

CourseName: Fysik A
Teacher : S.Clockers

Medan

SELECT CourseCode, CourseName FROM Course WHERE Teacher = 'S.Clockers'

returnerar kurskod och kursnamn för alla de kurser som S.Clockers undervisar i.

Vet inte alls om det var syntaxen du undrade över men är nog i princip det jag kan bidra med till denna tråd

Hej

Tack för snabbt svar, nja inte riktigt det svaret men snarlik

Ja min tabell heter sokning och allt fungerar men inte sorteringen vars villkor jag vill välja i min dm. Jag har ett hum om att det ska vara enligt syntaxen:
.... = 'SELECT colum FROM tabell WHERE colum = (Det man vill uppnå)'

Jag måste alltså få in någon typ av objekt &/eller en veriabel som innehåller datan jagg har valt från dm?

Mvh Fredrik

Visa signatur

Computer: Windows 10, 64-bit, Intel i9 - 10850K, Asus Rog MAXIMUS XII HERO (WI-FI), 32GB RAM, Asus RTX3070

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S. 

Permalänk
Medlem
Skrivet av freddehboy:

Hej

Tack för snabbt svar, nja inte riktigt det svaret men snarlik

Ja min tabell heter sokning och allt fungerar men inte sorteringen vars villkor jag vill välja i min dm. Jag har ett hum om att det ska vara enligt syntaxen:
.... = 'SELECT colum FROM tabell WHERE colum = (Det man vill uppnå)'

Jag måste alltså få in någon typ av objekt &/eller en veriabel som innehåller datan jagg har valt från dm?

Mvh Fredrik

Jag tror jag förstår vad du är ute efter.
Kan ge ett exempel med annan syntax,

Tänk dig en tabell Customer med Country, CustomerName, City.
* = (alla kolumner)

SELECT * FROM Customers ORDER BY Country ASC, CustomerName DESC;

Här har väljer du att sortera på två kolumner, först kommer du sortera A-Z på Country, och sedan för de objekt som har samma Country sorterar du namnet i omvänd ordning.

T.ex om du har
Anders Andersson | Göteborg | Sverige
Bengt Bengtsson | Malmö | Sverige
Mads Madsen | Köpenhamn | Danmark

Så kommer ordningen bli
Mads Madsen | Köpenhamn | Danmark
Bengt Bengtsson | Malmö | Sverige
Anders Andersson | Göteborg | Sverige

Då du sorterar först kolumnen Country och sedan de som har samma land sorteras Z-A.

Ett exempel i psuedokod där du bygger din query beroende på variabler

String condition = "Country = Sweden"; String orderByColumn = ""; String orderASC = "ASC"; String orderDESC = "DESC"; if(CheckBox_CustomerName is checked){ orderByColumn += "CustomerName"; } String query = "SELECT * FROM sokning WHERE " + condition + " ORDER BY " + orderByColumn +" " + orderASC;

Med andra ord kan du ha en grundquery SELECT A FROM B WHERE C ORDER BY D E
Där du ändrar variablerna A,B,C,D,E beroende på vad som har valts.

Permalänk
Skrivet av NoToes:

Jag tror jag förstår vad du är ute efter.
Kan ge ett exempel med annan syntax,

Tänk dig en tabell Customer med Country, CustomerName, City.
* = (alla kolumner)

SELECT * FROM Customers ORDER BY Country ASC, CustomerName DESC;

Här har väljer du att sortera på två kolumner, först kommer du sortera A-Z på Country, och sedan för de objekt som har samma Country sorterar du namnet i omvänd ordning.

T.ex om du har
Anders Andersson | Göteborg | Sverige
Bengt Bengtsson | Malmö | Sverige
Mads Madsen | Köpenhamn | Danmark

Så kommer ordningen bli
Mads Madsen | Köpenhamn | Danmark
Bengt Bengtsson | Malmö | Sverige
Anders Andersson | Göteborg | Sverige

Då du sorterar först kolumnen Country och sedan de som har samma land sorteras Z-A.

Ett exempel i psuedokod där du bygger din query beroende på variabler

String condition = "Country = Sweden"; String orderByColumn = ""; String orderASC = "ASC"; String orderDESC = "DESC"; if(CheckBox_CustomerName is checked){ orderByColumn += "CustomerName"; } String query = "SELECT * FROM sokning WHERE " + condition + " ORDER BY " + orderByColumn +" " + orderASC;

Med andra ord kan du ha en grundquery SELECT A FROM B WHERE C ORDER BY D E
Där du ändrar variablerna A,B,C,D,E beroende på vad som har valts.

Ska testa när jag är på jobbet

Med ditt exempel så måste jag deklarera en string och tilldela den en variabel innan jag använder stringet i SELECT SYNTAXEN. Det går med andra ord inte att använda en variabel direkt i SELECT!?

Oavsett är det väldigt stimulerande att arbeta med html, php m.m.

Visa signatur

Computer: Windows 10, 64-bit, Intel i9 - 10850K, Asus Rog MAXIMUS XII HERO (WI-FI), 32GB RAM, Asus RTX3070

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S. 

Permalänk
Medlem
Skrivet av freddehboy:

Ska testa när jag är på jobbet

Med ditt exempel så måste jag deklarera en string och tilldela den en variabel innan jag använder stringet i SELECT SYNTAXEN. Det går med andra ord inte att använda en variabel direkt i SELECT!?

Oavsett är det väldigt stimulerande att arbeta med html, php m.m.

Har ingen direkt koll på PHP så min psuedokod var från Java
Men jag tror att du kan göra

'SELECT $A FROM $B WHERE $C = $D ORDER BY $E $F'

Har för mig att du måste göra någon concatination

"SELECT " .$A " FROM " . $B

eller

"SELECT {$A} FROM {$B} .... "

Som sagt har ingen koll på hur string operationerna fungerar i php

Permalänk

Jag testar och ser, återkommer efter

Visa signatur

Computer: Windows 10, 64-bit, Intel i9 - 10850K, Asus Rog MAXIMUS XII HERO (WI-FI), 32GB RAM, Asus RTX3070

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S. 

Permalänk

Jag kan säga också att tabellen består av 15 olika kolumner varav 5 är sorteings nycklar jag väljer i min (dm). Jag missttänker att jag måste göra en förfrågan för varje kolumn, om det ska bli rätt!?

Visa signatur

Computer: Windows 10, 64-bit, Intel i9 - 10850K, Asus Rog MAXIMUS XII HERO (WI-FI), 32GB RAM, Asus RTX3070

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S. 

Permalänk

Javascript - jQuery Ajax

Tjena

Jag har beslutat att använda mig av exemplet:
http://www.w3schools.com/jquery/jquery_examples.asp - jQuery load() Method

Exempel koden är:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.mi..."></script> <script> $(document).ready(function() { $("button").click(function() { $("#div1").load("demo_test.txt #p1"); }); }); </script>

Jag har filerna:
sokning.php
resultat_sqldata.php
sorterad.php

sokning.php (/ = roten)
Har en knapp för att aktivera skriptet och själva skriptet. Det som ska ersättas återfinns i div1 ovan men denna div1 finns i en annan fil och mapp nämligen i: sidor/resultat_sqldata.php.

Det som ska laddas där i div1 ligger i en fil och mapp: data/sorterad.php

Frågor i koden nedan:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.mi..."></script> <script> $(document = php - Är tveksam om det går?).ready(function() { $("button").click(function() { $("sidor/resultat_sqldata.php #div1").load("data/sorterad.php #namn"); }); }); </script>

Frågor:
1.)
$(document = php - Är tveksam om det går?).ready(function() = document går väll inte i mitt fall där filen är php?

2.)
$("button").click(function() = accepterear den annan syntax än button?

3.)
$("sidor/resultat_sqldata.php #div1").load("data/sorterad.php #namn"); = Kan jag använda en "Selector" för url till en fil eller är det tvunget att div1 finns i samma fil som skriptet?

Var nu snälla då jag är en komplett nybörjare

Mvh Fredrik

Visa signatur

Computer: Windows 10, 64-bit, Intel i9 - 10850K, Asus Rog MAXIMUS XII HERO (WI-FI), 32GB RAM, Asus RTX3070

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S. 

Permalänk

SQL Select baserad på vad jag valt för selects sats tidigare

Hej

Jag har gått ifrån det här med droppddownlists och riktat in mig på att man ska välja en given sorterings form.

Har huvud knapparna:
Vuxna:
v1
v2
v3
.....

Barn:

v1
v2
v3
.....

Underknapparna ät lika frånsett att det finns vuxna och barn. Dessa underknappar leder till var sin select sats enligt "Select colums...... from (tabellens namn) och sortering villkor m.m.

Nu behöver jag kunna sortera det jag valt efter län, 3 st Stockholm, Skåne och övriga län, hur gör jag?

Jag vill alltså att kunna välja en knapp vars select är beroende vad jag har valt innan?

Mvh Fredrik

Visa signatur

Computer: Windows 10, 64-bit, Intel i9 - 10850K, Asus Rog MAXIMUS XII HERO (WI-FI), 32GB RAM, Asus RTX3070

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S. 

Permalänk
Medlem

Jag är inte helt säker på att jag förstått riktigt vad du är ute efter, men du kan sätta ett frågetecken i en sql-sats för att sedan ange vad det ska vara där mha en variabel.
T.ex:

$where = 1; // id blir ett $orderby = 'lan'; // Sorteras efter lan. $selectsokningsdb = 'SELECT id, stiftelse, lan, kommun FROM sokning where id = ? order by ? DESC'; $qshowselect = $fssqlconn->query($selectsokningsdb, [$where, $orderby]); // Ej helt hundra på att det ska in här i din kod. $qshowselect->setFetchMode(PDO::FETCH_ASSOC);

Så med lite get methoder och if satser kan du påverka din sql-sats innan den körs.

Kolla in denna sida: http://php.net/manual/en/pdo.prepare.php

Sedan för att ordna efter flera saker samtidigt spererar du dem bara med ett kommatecken::

SELECT id, stiftelse, lan, kommun FROM sokning ORDER BY LAN DESC, KOMMUN; // Kommun sorteras efter ASC som är default.

Permalänk
Skrivet av noyce:

Jag är inte helt säker på att jag förstått riktigt vad du är ute efter, men du kan sätta ett frågetecken i en sql-sats för att sedan ange vad det ska vara där mha en variabel.
T.ex:

$where = 1; // id blir ett $orderby = 'lan'; // Sorteras efter lan. $selectsokningsdb = 'SELECT id, stiftelse, lan, kommun FROM sokning where id = ? order by ? DESC'; $qshowselect = $fssqlconn->query($selectsokningsdb, [$where, $orderby]); // Ej helt hundra på att det ska in här i din kod. $qshowselect->setFetchMode(PDO::FETCH_ASSOC);

Så med lite get methoder och if satser kan du påverka din sql-sats innan den körs.

Kolla in denna sida: http://php.net/manual/en/pdo.prepare.php

Sedan för att ordna efter flera saker samtidigt spererar du dem bara med ett kommatecken::

SELECT id, stiftelse, lan, kommun FROM sokning ORDER BY LAN DESC, KOMMUN; // Kommun sorteras efter ASC som är default.

Du är det på spåren men jag ska försöka förklara.

Jag är ute efter något liknande som nedan:

1 - Du väljer knappen med select satsen:

try { $selectsortbyval_b_oe_v4 = "SELECT id, stiftelse, tillhor, underlag, malgrupp, lan, sate, vilkasoka, ansokansenast, begrensningar, minfo, wadress FROM sokning WHERE vuxna='Vuxna' AND socialarekreation='Sociala / Rekreation' ORDER BY id ASC"; $qsortbyvalvuxna4 = $fssqlconn->query($selectsortbyval_b_oe_v4); $qsortbyvalvuxna4->setFetchMode(PDO::FETCH_ASSOC); } catch (PDOException $perrorsortbyvuxna4) { die("Kunde inte upprätta en anslutning till $dbname" . $perrorsortbyvuxna4->getMessage()); }

Koden ovan letar efter kriterier del efter "Vuxna" i kolumnen vuxna och "Sociala / Rekreation" i kolumnen socialarekreation. Detta sorteras efter kolumnen id ASC!

Nu vill jag sortera resultatet efter ett län enligt ovannämnda. Jag tänker också på om det handlar om subqueries?

En logisk ordning är att dessa län val är huvud selet satsen och den select satsen jag valt innan är sparad i en varabel som jag nu använder i denna som en subquery?

Den tankegången förutsätter att jag kan inkludera en variabel i en sql fråga!?

Hmm du nämnde if satser, där kan man för sig skapa flera select satser för var och en av valen m.m.

If satserna kan innehålla den aktuella select satsen du vill köra. Vilket är enklast?

Visa signatur

Computer: Windows 10, 64-bit, Intel i9 - 10850K, Asus Rog MAXIMUS XII HERO (WI-FI), 32GB RAM, Asus RTX3070

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S. 

Permalänk
Medlem
Skrivet av freddehboy:

Koden ovan letar efter kriterier del efter "Vuxna" i kolumnen vuxna och "Sociala / Rekreation" i kolumnen socialarekreation. Detta sorteras efter kolumnen id ASC!

Nu vill jag sortera resultatet efter ett län enligt ovannämnda. Jag tänker också på om det handlar om subqueries?

Så först vill du sortera efter id, och sedan efter vilket län det är? Om id:et är unik så blir det en motsägning skulle jag tro, varför sorterat du inte efter län direkt? koden nedan sorter först efter id och sedan efter lan om det finns ett id med samma nummer.

$selectsortbyval_b_oe_v4 = "SELECT id, stiftelse, tillhor, underlag, malgrupp, lan, sate, vilkasoka, ansokansenast, begrensningar, minfo, wadress FROM sokning WHERE vuxna='Vuxna' AND socialarekreation='Sociala / Rekreation' ORDER BY id ASC, lan";

Permalänk

Har tänkt ytterligare och det jag nog vill göra är att utifrån ett formulär ha:
1.)
Ett antal "radio" buttons och för de olika alternativen.

2.)
Om om man inte behöver välja län så sorterar man utan län.

3.)
Annars har man nya alternativ för länen som man då väljer.

Kan man göra något sådant med forms och IF satser?

Visa signatur

Computer: Windows 10, 64-bit, Intel i9 - 10850K, Asus Rog MAXIMUS XII HERO (WI-FI), 32GB RAM, Asus RTX3070

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S. 

Permalänk
Medlem
Skrivet av freddehboy:

Har tänkt ytterligare och det jag nog vill göra är att utifrån ett formulär ha:
1.)
Ett antal "radio" buttons och för de olika alternativen.

2.)
Om om man inte behöver välja län så sorterar man utan län.

3.)
Annars har man nya alternativ för länen som man då väljer.

Kan man göra något sådant med forms och IF satser?

Jag har tittat igenom dina tidigare inlägg och tror jag börjar förstå vad du är ute efter.
Säg att du väljer ett antal rader ur tabellen, utefter det resultatet vill du söka på nya resultat eller endast sortera om dem efter ett visst kriterium. Det absolut bästa hade varit om du skrev ut en exempel tabell, före och efter ett val för att förstå tanken enklare.
Men men lite kod kan det se ut tex:

$sql = "Select * from Tabell WHERE id in ( Select id from Tabell where .... ORDER BY id; ) ORDER BY lan";