SQL - SELECT kodeeksempler.
Sider vedr. SELECT kan ses herfra:
![x](/felles/ikoner/right.gif) | Syntaks |
![x](/felles/ikoner/right.gif) | Diverse kodeksempler |
![x](/felles/ikoner/right.gif) | Dynamisk select |
![x](/felles/ikoner/right.gif) | Sideopdelt select |
Select kommandoen er uden sammenligning den mest komplekse af alle SQL kommandoerne. Beskrivelsen af den er delt op i en række afsnit baseret på nedenstående menu:
![x](/felles/ikoner/ned.gif) | mysqli_real_escape_string() |
![x](/felles/ikoner/ned.gif) | Select - basis eksempler |
![x](/felles/ikoner/ned.gif) | $row |
![x](/felles/ikoner/ned.gif) | |
Select - basis eksempler
Nedenfor er vist 4 grundformer for SELECT. De kan udbygges efter behov.
Mange records til tabel
$query = "SELECT * FROM tabelnavn
ORDER BY feltnavn ASC";
$result = mysqli_query($db_link, $query) or die(mysqli_error($db_link));
$antal = mysqli_num_rows ($result);
if ($antal == 0)
{
echo "<p>Der blev ikke fundet nogen data.<p>";
}
else
{
echo '<table>';
while ($row = mysqli_fetch_assoc ($result))
{
echo "<tr>";
echo "<td>" . $row['felt_navn01'] . "</td>";
.
.
.
echo "</tr>";
} // slut while
echo "</table>";
}
|
Mange records til tabel - INNER JOIN
$query = "SELECT * FROM tabelnavn01
INNER JOIN tabelnavn02 ON fk_feltnavn01_id = feltnavn01_id
INNER JOIN tabelnavn03 ON fk_feltnavn02_id = feltnavn02_id
WHERE fk_felt04_id = '$fk_felt04_id'
ORDER BY feltnavn05 asc";
$result = mysqli_query($db_link, $query) or die(mysqli_error($db_link));
$antal = mysqli_num_rows($result);
if ($antal == 0)
{
echo "Der blev ikke fundet nogen data";
}
else
{
echo "<table>";
echo "<tr><td>Tekst01</td><td>Tekst02</td><td>Tekst03</td></tr>";
while ($row = mysqli_fetch_assoc ($result))
{
echo "<tr><td>" .$row['feltnavn_a'] . "</td><td>" . $row['feltnavn_b'] . "</td><td>" . $row['feltnavn_c'] . "</td></tr>";
} // slut while
echo "</table>";
}
|
Enkelt record til tabel
Vil, hvis feltet har mange forekomster, give mange records.
$query = "SELECT felt1, felt2 FROM tabel
WHERE feltnavn = $variabel";
$result = mysqli_query($db_link, $query) or die(mysqli_error($db_link));
$row = mysqli_fetch_assoc ($result);
$antal = mysqli_num_rows ($result);
if ($antal == 0)
{
echo "<p>Der blev ikke fundet nogen data.<p>";
}
else
{
echo "<table>";
echo "<tr><td>Tekst</td><td>" . $row['felt1'] . "</td></tr>";
echo "<tr><td>Tekst</td><td>" . $row['felt2']. "</td></tr>";
echo "</table>";
|
Enkelt / ingen record til brug ved validering.
og andre situationer, hvor der kun er brug for en / ingen record og antal, men ikke data; f.eks. til validering.
// hent data til Select-menu for xxx
$query = "SELECT * FROM tabel
WHERE feltnavn = '$variabel'";
$result = mysqli_query($db_link, $query) or die(mysqli_error($db_link));
$antal = mysqli_num_rows($result);
if ($antal > 0)
{$fejlbeskeder .= "Den xxx du har angivet findes allerede.<br />";}
|
Kommasepareret fil.
Etablering af komma-separeret fil (.csv), der umiddelbart kan åbnes med bl.a. Excel.
Filen kan placeres hvorsomhelst indenfor eget LAN.
FIELDS TERMINATED BY ','. Separator mellem felter. Normalt ',' eller ';'. Escape-karakteren '\t' (tabulator) kan også anvendes. Vigtigst er, at det anvendte tegn ikke forekommer i datastrengene og at filen kan læses af det program / programmeringssprog, der skal bruge dataene.
LINES TERMINATED BY '\n'. Escape-karakteren '\n' (linieskift) anvendes oftest til at afslutte records.
$query = "SELECT *
INTO OUTFILE 'c:/test/filnavn.csv'
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
FROM tabelnavn";
$result = mysqli_query($db_link, $query) or die(mysqli_error($db_link));
|
$row
Fra $row kan der overføres data til enkeltfelter, tabeller, lister og arrays. Tabeller er indeholdt i eksemplerne ovenfor
Udtræk til liste - menu med sidegenbrug.
Faste menupunkter kan indsættes før og efter udtrækket.
$query = "SELECT * FROM tabelnavn";
$result = mysqli_query($db_link, $query) or die(mysqli_error($db_link));
$antal = mysqli_num_rows ($result);
if ($antal > 0)
{
echo "<ul>";
echo "<li><a href='index.php'>Velkommen</a></li>";
while ($row = mysqli_fetch_assoc ($result))
{
echo "<li><a href='produkter.php?kat_id=$menu_row[kat_id]&kat_navn=$row[kat_navn]'>$row[kat_navn]</a></li>";
} // While slut
echo "<li><a href='kontakt.php'>Kontakt</a></li>";
echo "</ul>";
} // antal
else
{
echo "Der er ingen data til menuen";
} // antal slut
?>
|
Udtræk til array - ASSOCIATED.
$query = "SELECT * FROM tabelnavn01
inner join tabelnavn02 on tabelnavn01.fk_feltnavn01_id = tabelnavn02.feltnavn02_id
WHERE feltnavn03 = $feltnavn04
order by tabelnavn02.feltnavn02_id asc ";
$result = mysqli_query($db_link, $query) or die(mysqli_error($db_link));
while ($row = mysqli_fetch_assoc ($result))
{
$g_rettigheder[$row['navnefelt']] = $row['værdifelt'];
} //slut while
|
----------
Nedenfor vises en række eksempler på anvendelse af SELECT-kommandoen:
Enkelt record til Value-felter i input type-tags.
og andre situationer, hvor der kun er brug for en record.
<?php
$query = "SELECT * FROM tabelnavn
WHERE feltnavn = $variabel";
$result = mysqli_query($db_link, $query) or die(mysqli_error($db_link));
$row = mysqli_fetch_assoc ($result);
$antal = mysqli_num_rows ($result);
if ($antal == 0)
{
echo "<p>Der blev ikke fundet nogen data.</p>";
}
?>
.
.
<form method="post">
<table>
<tr><td>tekst</td><td><input type="text" name="navn" value="<?php echo $row['feltnavn'] ?>" /></td></tr>
.
.
|
eller
Omlægning til variabler som 'mellemled'
<?php
$query = "SELECT * FROM tabelnavn
WHERE feltnavn = $variabel";
$result = mysqli_query($db_link, $query) or die(mysqli_error($db_link));
$row = mysqli_fetch_assoc ($result);
$antal = mysqli_num_rows ($result);
if ($antal == 0)
{
echo "<p>Der blev ikke fundet nogen data.</p>";
}
else
}
$variabel01 = $row['feltnavn01'];
$variabel02 = $row['feltnavn02'];
.
.
}
?>
.
.
<form method="post">
<table>
<tr><td>tekst</td><td><input type='text' name='navn' value="<?php echo $variabel01; ?>" /></td></tr>
.
.
|
Små eksempler på select.
| Udskriv alle informationer om alle lokaler. -----
"SELECT * FROM lokaler"; |
| Lav en knap eller et link med teksten "Vis alle", der viser alle lokaler, når der klikkes på det -----
"SELECT navn FROM lokaler"; |
where order by | Find og udskriv navnene på alle lokaler der ikke har en projektor, sorteret alfabetisk. -----
"SELECT navn FROM lokaler WHERE projektor <> 1 ORDER BY navn ASC"; |
where < order by | Find og udskriv navn og max antal elever på alle lokaler, der har plads til mindre end 30 elever, sorter dem efter MaxElever, stigende. -----
"SELECT navn, maxelever FROM lokaler WHERE maxelever < 30 ORDER BY maxelever ASC"; |
where between order by | Find og udskriv navnene på alle lokaler der kan have mellem 25 og 35 elever (begge tal inklusiv). -----
"SELECT navn FROM lokaler WHERE maxelever BETWEEN '25' and '35' ORDER BY navn, maxelever ASC"; |
order by limit | Vælg de 3 største lokaler. -----
"SELECT navn,maxelever FROM lokaler ORDER BY maxelever DESC LIMIT 0,3 "; |
order by rand() limit | Udskriv alle informationer om et tilfældigt lokale, udvalgt af systemet. -----
"SELECT * FROM lokaler ORDER BY RAND() LIMIT 1"; |
where like | Find og udskriv navnene på alle lokaler som starter med et "C". -----
"SELECT navn FROM lokaler WHERE navn LIKE 'C%'" |
where like | Find og udskriv navnene på alle lokaler hvor der i anvendelse findes mindst et "e". -----
"SELECT navn FROM lokaler WHERE anvendelse LIKE '%e%'"; |
where like | Lav et tekstfelt, hvor der kan søges efter alle lokaler indeholdende en bestemt tegnkombination (et eller flere sammenhængende bogstaver) i navnet. -----
"SELECT navn FROM lokaler WHERE navn LIKE '%$streng%'"; |
where like | Lav et tekstfelt, hvor der kan søges efter alle lokaler indeholdende en bestemt tegnkombination (et eller flere sammenhængende bogstaver) i navnet. Der skal kunne vælges mellem alle bogstaver i navnet eller om søgningen skal starte fra begyndelsesbogstavet i navnet. -----
"SELECT navn FROM lokaler WHERE navn LIKE '$streng'"; |
inner join | Udskriv alle informationer om alle lokaler incl. hvilken bygning lokalet hører til. -----
"SELECT * FROM lokaler INNER JOIN bygning ON fk_bygning_id = bygning_id"; $result = mysqli_query($db_link02,$query); |
inner join where | Lav 3 links - et til hver bygning. Find og udskriv lokalerne, der hører til den enkelte bygning, når der er trrykket på et af linkene -----
"SELECT navn FROM lokaler left JOIN bygning ON fk_bygning_id = bygning_id WHERE bygning_id = 1"; |
inner join | Find og udskriv antal lokaler pr. bygning -----
"SELECT bygning_navn, count(fk_bygning_id) as antal FROM lokaler INNER JOIN bygning ON fk_bygning_id = bygning_id group by fk_bygning_id"; |
Et udtræk består kodemæssigt af 3 dele:
1 | $query = "SELECT * FROM sidedata"; | Etablering af variablen $query, der har SQL-sætningen som sin værdi. |
2 | $result = mysqli_query ($db_link, $query) or die (mysqli_error ($db_link)); | Etablering af variablen $result, der har ODBC-funktionerne mysqli-query og mysqli_error som værdi.
mysqli_query udtrækker data fra databasen til $result baseret på de 2 parametre, hvoraf $query er defineret på linien ovenover og $db_link i includeprogrammet db_connect.php De udtrukne data placeres i $result-variablen.
mysqli_error tager over, hvis noget gået galt under dataudtrækket. |
3 | $row = mysqli_fetch_assoc ($result);
.
.
| Med ODBC-funktionen mysqli_fetch_assoc hentes en række (ad gangen) fra databaseudtrækket til lagring i variablen $row som "associativ" array for videre individuel benyttelse i php. |
3a | while($row = mysqli_fetch_assoc ($result))
.
. | Den videre brug af row-dataene kan ske ganske hurtigt. |
Data
Udtræk 1
Generelt udtræk og visning af flere felter fra den først udtrukne record.
<?php
$query = "SELECT * FROM sidedata";
$result = mysqli_query ($db_link, $query) or die (mysqli_error ($db_link));
$row = mysqli_fetch_assoc ($result);
echo $row['omos_id'];
echo nl2br ($row['side_tekst']);
?>
| Indsættes på HTML-siden der hvor dataene skal vises. |
Udtræk 2
Generelt udtræk og visning af et felt fra hver record i udtrækket.
<?php
$query = "SELECT * FROM sidedata";
$result = mysqli_query ($db_link, $query) or die (mysqli_error ($db_link));
while($row = mysqli_fetch_assoc ($result))
{
echo nl2br ($row['side_tekst']);
}
| Indsættes på HTML-siden der hvor dataene skal vises. |
Udtræk 3
Generelt udtræk og visning af data fra specifik record i udtrækket.
<?php
$query = "SELECT * FROM 04div_tabel02";
$result = mysqli_query ($db_link, $query) or die (mysqli_error ($db_link));
while($row = mysqli_fetch_assoc ($result))
{
if($row["04div_id"] == 3)
{
echo $row['04div_id']; ?>
<?php echo "<h1>" . $row ['04div_overskr'] . "</h1>"; ?>
<?php echo nl2br ($row['04div_tekst']); ?>
<?php
}
}
?>
Den sidste del kan også kodes således:
while($row = mysqli_fetch_assoc ($result))
{
if($row["04div_id"] == 3)
{
echo $row['04div_id'];
echo "<h1>" . $row ['04div_overskr']). "</h1>";
echo $row nl2br (['04div_tekst']);
}
}
?>
| Indsættes på HTML-siden der hvor dataene skal vises. |
Udtræk 4
Indbygning af udtræk i f.eks. liste eller tabel. Nedenfor er den første listelinie hardkodet.
<ul>
<li><a href='index.php'>Forside</a></li>
<?php
$query = " SELECT * FROM hold ORDER BY hold_navn ASC ";
$result = mysqli_query ($db_link, $query) or die (mysqli_error ());
while ($row = mysqli_fetch_assoc ($result))
{
echo "<li><a href='elever.php?hold_id=$row[hold_id]'>$row[hold_navn]</a&ht;</li>";
}
?>
</ul>
|
Indsættes på HTML-siden der hvor dataene skal vises.
|
Diverse
Antal records i "result".
Efter Result indsættes:
$antal = mysqli_num_rows ($result);
if($antal > 0) ...
|
Billeder
Visning af billeder
- Billeder placeres i mappe i tilknytning til aktuelt site.
- Billednavne (xx.jpg etc.) placeres i tabel i DB i feltet 'billeder_img'.
- i udtrækssekvens i php indsættes:
echo "<img src=' ". $row['billeder_img'] . " ' >" ;
Sti til billede indsættes mellem echo og "<img
|
|