logo   SQL - SELECT kodeeksempler.




Sider vedr. SELECT kan ses herfra:


xSyntaks
xDiverse kodeksempler
xDynamisk select
xSideopdelt 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:


xmysqli_real_escape_string()
xSelect - basis eksempler
x$row
x




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 joinUdskriv 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 joinFind 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




















x
x