Beispiele zu PHP/SQL

Werbung
PHP/SQL
RP 2011
E3A
Beispiele zu PHP/SQL
1. Beispiel: Programmiere dynamisch eine Tabelle mit Schachbrettmuster. Dabei gilt folgende Logik:
(Sind Zeilen- UND Spaltennummer gerade), ODER (sind Zeilen- UND Spaltennummer
ungerade),
dann sind die Zellen schwarz gefärbt und die Schriftfarbe weiß.
sonst sind die Zellen weiß und die Schrift schwarz
(Sind die Zeilennummer 1 UND die Spaltennummer 1),
dann soll der Inhalt aus Buchstabe und Spaltennummerierung bestehen (1A),
ist aber nur die Zeilennummer 1,
dann soll der Zelleninhalt aus Buchstaben bestehen,
ist aber nur die Spaltennummer 1,
dann soll der Zelleninhalt mit der Zeilennummer befüllt sein,
sonst besteht der Inhalt aus Leerzeichen
Abbildung 1: Browseransicht
2. Beispiel: Programmiere dynamisch eine Tabelle mit folgendem Aussehen, wobei folgende Logik
gilt:
(Ist Spaltennummer ≥ Zeilennummer
UND Spalte ≤ Größe − Zeilennummer + 1) ODER
(ist Spaltennummer ≤ Zeilennummer
UND Spaltennummer ≥ Größe − Zeilennummer + 1),
dann ist die Zelle rot gefärbt, sonst grün.
Die Größe der Tabelle wird per GET übergeben und soll aus
Gründen der Symmetrie eine ungerade Zahl sein.
Abbildung 2: Browseransicht
1
PHP/SQL
RP 2011
E3A
3. Programmiere dynamisch Tabellen mit folgendem Aussehen. Versuche dabei, den Algorithmus
selbst zu entwickeln (analog zu den beiden obigen Beispielen). Dabei soll wieder die Größe per
GET übergeben werden.
Abbildung 3: Browseransicht
Abbildung 4: Browseransicht
4. Für folgende Beispiele wird die SQL-Datei benötigt.
a) Mit welchem Befehl wird der Gesamtumsatz pro Vertreter ermittelt?
b) Selektiere den teuersten Artikel
c) Welche Artikel liegen über dem Umsatzdurchschnitt?
d) Wie viele Umsätze gibt es pro Tag?
e) Gib die Werte der Tabelle artikel aus, zusätzlich aber noch den Bruttopreis bei einer Steuer
von 20%. Der ursprüngliche Preis in der Tabelle artikel ist der Nettopreis.
f) Die Ausgabe der Tabelle artikel soll so aussehen: liegt der Preis über 200, dann wird teuer
ausgegeben, liegt er unter 100, dann billig, sonst normal.
a_name | a_preis | case
----------+---------+-------Oberhemd |
39.80 | billig
Mantel
| 360.00 | teuer
Oberhemd |
44.20 | billig
Hose
| 110.50 | normal
2
PHP/SQL
RP 2011
E3A
g) Gib den Umsatz pro Vertreter, dazu die errechnete Provision, aus.
v_nr |
sum
| provision
------+----------+----------8413 | 9437.50 | 660.6250
5016 | 16200.00 | 810.0000
1215 | 1834.50 | 110.0700
h) Mit welchem Befehl würden alle Faulsäcke (Vertreter ohne Umsatz) ausgegeben werden?
i) Mit welchem Befehl werden die Vertreter mit mehr als 2 Umsätzen ausgegeben.
v_nr | anzahl umsätze
------+---------------1215 |
3
8413 |
4
j) Welche Artikel erzielen einen Umsatz über 2000?
a_name | a_preis |
sum
----------+---------+---------Oberhemd |
44.20 | 4862.00
Hose
| 110.50 | 4420.00
Mantel
| 360.00 | 16200.00
k) Gib die Artikel, ihre Preise und die Differenz zum Durchschnittspreis aus
a_name | a_preis |
diff
----------+---------+---------------------Oberhemd |
39.80 | -98.8250000000000000
Mantel
| 360.00 | 221.3750000000000000
Oberhemd |
44.20 | -94.4250000000000000
Hose
| 110.50 | -28.1250000000000000
l) Wenn Artikel teurer als der Durchschnitt sind, dann soll teurer, wenn sie billiger sind, soll
billiger ausgegeben werden.
----------+---------+---------Oberhemd |
39.80 | billiger
Mantel
| 360.00 | teurer
Oberhemd |
44.20 | billiger
Hose
| 110.50 | billiger
m) Erkläre detailliert die notwendigen Schritte in SQL, wenn jeder Vertreter ein Geburtsdatum
erhalten soll.
n) Welche Beziehungen liegen zwischen den Tabellen vertreter, artikel und umsatz vor?
Begründe und erläutere andere mögliche Beziehungsformen.
3
PHP/SQL
RP 2011
1. Lösung Schach
<table border = 1>
<?PHP
for ( $zeilen = 1; $zeilen <= 8; $zeilen++)
{
echo "<tr>";
for ($spalten = 1, $buch = "A"; $spalten <= 8; $spalten++, $buch++)
{
/∗ gerade ∗/
/∗ ungerade ∗/
if (( $zeilen % 2 == 0 AND $spalten % 2 == 0) OR ($zeilen % 2 == 1 AND $spalten % 2 == 1))
{
$color = "#000000";
$font = "#FFFFFF";
}
else
{
$color = "#FFFFFF";
$font = "#000000";
}
/∗ wenn spalte = 1 dann inhalt = zeilennummer ∗/
if ( $zeilen == 1 AND $spalten == 1)
{
$inhalt = "$zeilen$buch";
}
elseif ($spalten == 1)
{
$inhalt = $zeilen;
}
elseif ( $zeilen == 1)
{
$inhalt = $buch;
}
else
{
$inhalt = " ";
}
echo "<td bgcolor=$color><font color= $font>$inhalt</font></td>";
}
echo "</tr>";
}
?>
</table>
2. Lösung
<table border =1>
<?PHP
/∗ if (! isset ($_GET["groesse"]))
{
echo " sie muessen z.b. tabelle1 .php?groesse=11 angeben";
exit ;
}∗/
$groesse = $_GET["groesse"];
for ($x = 1; $x<=$groesse; $x++)
{
echo "<tr>";
for ($y = 1; $y<=$groesse; $y++)
{
if (($y >= $x AND $y <= ($groesse −$x + 1)) OR ($y <= $x AND $y >= $groesse − $x + 1))
{
$color = "#FF0000";
}
else
{
$color = "#00FF00";
}
if ($color == "#FF0000") //kasterl rot
{
$font = "#00FF00"; //schrift gruen
}
else
{
$font = "#FF0000"; //schrift rot bei gruenem kastl
}
echo "<td bgcolor=$color><font color=$font>A</font></td>";
}
echo "</tr>";
}
echo $groesse ;
echo "</table>";
?>
4
E3A
PHP/SQL
RP 2011
3. Lösung
<table border=1>
<?PHP
$max = 9;
//$mw = ceil($max/2);
for ($x=1; $x <= $max; $x++)
{
echo "<tr>";
for ($y=1; $y <= $max; $y++)
{
/∗ if ($y == $x OR ($x + $y == 2∗$mw))∗/
if ($y == $x OR ($y == $max − $x + 1))
{
$color="#FF0000";
}
else
{
$color="#FFFF00";
}
echo "<td bgcolor=$color> </td>";
}
echo "</tr>";
}
?>
</table>
4. Lösung
<table border=1>
<?PHP
$max = $_GET["size"];
$mw = ceil($max/2);
for ($x=1; $x <= $max; $x++)
{
echo "<tr>";
for ($y=1; $y <= $max; $y++)
{
// if ($y == $x OR ($x + $y == 2∗$mw) OR($x == $mw) OR ($y == $mw))
if ($y == $x OR ($y == $max − $x + 1) OR($x == $mw) OR ($y == $mw))
{
$color="#FF0000";
}
else
{
$color="#FFFF00";
}
echo "<td bgcolor=$color> </td>";
}
echo "</tr>";
}
?>
</table>
5. Lösung
<table border=1>
<?PHP
$max = $_GET["size"]; //9
$mw = ceil($max/2); //5
for ($x=1; $x <= $max; $x++)
{
echo "<tr>";
for ($y=1; $y <= $max; $y++)
{
/∗ rechte obere
∗ zeile
spalte
∗ 2
6 (mw + zeile − 1)
∗ 3
7
∗ 4
8
∗
∗ linke untere
∗ 6
2 ( zeile − mw + 1)
∗ 7
3
∗ 8
4
∗
∗ rechts unten
∗ 6
8 ()
∗ 7
7
∗ 8
6
∗ 9
5
∗/
// if (($x == $mw + 1 − $y) OR($x == $y − $mw +1)OR ($x == $y + $mw −1)OR($x == $mw − $y + $max ))
if (($y == $mw + 1 − $x) OR($y == $x + $mw −1)OR ($y == $x − $mw +1)OR($y == $mw + $max − $x))
{
$color="#FF0000";
}
else
{
$color="#00FF00";
}
echo "<td bgcolor=$color> </td>";
}
echo "</tr>";
5
E3A
PHP/SQL
RP 2011
}
?>
</table>
6. Lösung
<table border=1>
<?PHP
/∗ max = 11
∗ zeile | spalte | spalte
∗ 3
| 3
|max − x + 1 (9)
∗ 5
| 5
|max − x + 1 (7)
∗ 7
| 7
|max − x + 1 (5)
∗ 9
| 9
|max − x + 1 (3)
∗/
$max = $_GET["size"]; //9
for ($x=1; $x <= $max; $x++)
{
echo "<tr>";
for ($y=1; $y <= $max; $y++)
{
/∗ oben:
spalte 1 oder rechts
unten:
spalte 1 oder
rechts ∗/
if ($x == 1 AND ($y == 1 OR $y == $max) OR ($x == $max AND ($y == 1 OR $y == $max)))
{
$color = "#000000";
}
elseif (($x == $y OR $y == $max − $x + 1 ) AND $x % 2 == 1 AND $y % 2 == 1)
{
$color="#FF0000";
}
else
{
$color="#00FF00";
}
echo "<td bgcolor=$color> </td>";
}
echo "</tr>";
}
?>
</table>
7. Lösung
<table border = 1>
<?PHP
$x = $_GET["size"];
//$color1 = $_GET["color1"];
//$color2 = $_GET["color2"];
//$x = 6;
for ($a = 1; $a <= $x; $a++)
{
echo "<tr>";
for ($b = 1; $b <= $x; $b++)
{
/∗ zeile 1
spalte 1
zeile 1
spalte max
zeile max spalte 1
zeile max
∗ spalte max ∗/
if (($a == 1 && $b == 1) ||($a == 1 && $b == $x) || ($a == $x && $b == 1) || ($a == $x && $b == $x) )
{
$color = "#000000";
}
elseif ($b <= $a)
{
$color = "#FF0000";
//$color = "$color2";
}
else
{
$color = "#00FF00";
//$color = "$color1";
}
echo "<td bgcolor=$color> </td>";
}
echo "</tr>";
}
?>
</table>
8. Lösung
<table border=1>
<?PHP
$max = $_GET["size"]; //9
$mw = ceil($max/2); //5
for ($x=1; $x <= $max; $x++)
{
echo "<tr>";
for ($y=1; $y <= $max; $y++)
{
if ($x % 3 == 0 AND $y % 2 == 0)
{
$color = "#FF0000";
6
E3A
PHP/SQL
RP 2011
}
elseif ($x % 2 == 0 AND $y % 3 == 0)
{
$color="#00FF00";
}
else
{
$color = "#FFFFFF";
}
echo "<td bgcolor=$color> </td>";
}
echo "</tr>";
}
?>
</table>
9. Lösung SQL
#−−−−−−−−−gesamtumsatz pro vertreter
select v_name, sum(a_preis ∗ a_stueck) as "umsatz pro vertreter" from
vertreter , umsatz, artikel where umsatz.v_nr = vertreter.v_nr and
artikel . a_nr = umsatz.a_nr group by umsatz.v_nr, v_name;
#−−−−−−−−−teuerster artikel
select ∗ from artikel where a_preis = (select max(a_preis) from
artikel )
#−−−−−−−−−artikel über umsatzdurchschnitt
select ums.a_nr, ums.datum, ums.v_nr,art.a_preis ∗ ums.a_stueck from
artikel art , umsatz ums where art.a_nr = ums.a_nr and art.a_preis ∗
ums.a_stueck >
( select avg(a.a_preis ∗ u.a_stueck) from artikel a, umsatz u where
a.a_nr = u.a_nr)
#−−−−−−−−−umsätze pro tag
select datum,count(∗) as "umsaetze pro tag" from umsatz group by
datum;
#−−−−−−−−−artikel mit 20% aufschlag (brutto/netto)
select a_nr, a_name, a_preis as "das ist der netto preis", a_preis ∗ 1.2 as "brutto" from
artikel
#−−−−−−−−−artikel billig/normal/teuer
select a_name, a_preis,case
when a_preis < 100 then 'billig'
when a_preis > 200 then 'teuer'
else 'normal' end
from artikel ;
#−−−−−−−−−umsatz pro vertreter incl. provision
select vertreter .v_nr,sum(a_stueck ∗ a_preis), sum(a_stueck∗a_preis)∗vertreter.v_prov as
"provision" from umsatz, artikel , vertreter where artikel .a_nr = umsatz.a_nr and
umsatz.v_nr = vertreter.v_nr group by vertreter.v_nr, vertreter.v_prov;
#−−−−−−−−−vertreter ohne umsatz
select v_name from vertreter v left join umsatz u on u.v_nr = v.v_nr where u.v_nr is null
#−−−−−−−−−vertreter mit mehr als 2 umsätzen
select v_nr, count(∗) as "anzahl umsätze" from umsatz group by v_nr having count(∗) > 2
#−−−−−−−−−umsatz von artikeln über 2000
select artikel . a_name, artikel.a_preis,sum(a_stueck ∗ a_preis) from
artikel , umsatz where artikel.a_nr = umsatz.a_nr and artikel.a_nr in
( select a.a_nr from umsatz u, artikel a where a.a_nr = u.a_nr group by
a.a_nr having sum(u.a_stueck ∗ a.a_preis) > 2000)group by
artikel . a_name,a_preis;
#−−−−−−−−−artikelpreise und differenz zum durchschnitt
select a_name, a_preis, a_preis − (select avg(a_preis) from artikel) as diff from artikel ;
#−−−−−−−−−wenn preis über durchschnitt dann teurer, wenn unter dann
#billig , sonst durchschnitt
select a_name, a_preis,
case
when a_preis − "mittel" > 0 then 'teurer'
when a_preis − "mittel" < 0 then 'billiger'
else 'durchschnitt'
end
from ( select ∗,( select avg(a_preis) from artikel ) as mittel from artikel ) as x;
#−− oder so −−#
select a_name, a_preis,
case
when a_preis −(select avg(a_preis) from artikel) > 0 then 'teurer'
when a_preis −(select avg(a_preis) from artikel) < 0 then ' billiger '
else 'durchschnitt'
end
from artikel
7
E3A
Herunterladen