Ich versuche mal meine Programmieraufgabe zu beschreiben, damit wir gemeinsam nach Lösungen suchen können.
Ankündigung
Einklappen
Keine Ankündigung bisher.
Tabellenausgabe.
Einklappen
Neue Werbung 2019
Einklappen
X
-
Zuletzt geändert von Investmentclub; 26.12.2012, 11:49.Hier meine Lösung:
AnsichtPHP-Code:<?php
anmelden_db();
anzeige_verzeichnis();
mysql_close();
function anmelden_db() {
mysql_connect("a", "m","k") or die ("Keine Verbindung moeglich");
mysql_select_db("m") or die ("Die Datenbank existiert nicht.");
}
function anzeige_verzeichnis() {
$sql = "SELECT * FROM verzeichnis";
$ergebnis = mysql_query($sql);
echo "<h2>Verzeichnis</h2>";
echo "<table width='30%' border='5' cellpadding='0' cellspacing='2'>";
echo "<tr><th>Nr</th><th>Gruppe</th><th>Bezeichnung</th></tr>";
while($row = mysql_fetch_object($ergebnis)) {
echo "<tr><td>";
echo $row->nr;
echo "</td><td>";
echo $row->gruppe;
echo "</td><td>";
echo $row->bezeichnung;
echo "</td></tr>"; }
echo "</table>"; }
?>
Gibt es eine einfáchere Lösung?
Wie muss die SQL-Anweisung aussehen, damit sich die Gruppenreihefolge aus der nr ergibt?
Kommentar
-
Zuletzt geändert von Investmentclub; 26.12.2012, 11:50.Hier meine Lösung:
Ansicht sortiertPHP-Code:<?php
anmelden_db();
anzeige_verzeichnis();
mysql_close();
function anmelden_db() {
mysql_connect("a", "m","k") or die ("Keine Verbindung moeglich");
mysql_select_db("m") or die ("Die Datenbank existiert nicht.");
}
function anzeige_verzeichnis() {
$sql = "SELECT b.*, MIN(a.nr) AS c, a.gruppe FROM verzeichnis AS a ";
$sql .= "INNER Join verzeichnis AS b ON a.gruppe = b.gruppe ";
$sql .= "GROUP BY a.gruppe,b.nr ";
$sql .= "ORDER BY c, b.nr";
$ergebnis = mysql_query($sql);
echo "<h2>Verzeichnis</h2>";
echo "<table width='30%' border='5' cellpadding='0' cellspacing='2'>";
echo "<tr><th>Nr</th><th>Gruppe</th><th>Bezeichnung</th></tr>";
while($row = mysql_fetch_object($ergebnis)) {
echo "<tr><td>";
echo $row->nr;
echo "</td><td>";
echo $row->gruppe;
echo "</td><td>";
echo $row->bezeichnung;
echo "</td></tr>"; }
echo "</table>"; }
?>
Gibt es eine einfáchere Lösung?
Wie kann man die gefundene Reihenfolge zurückschreiben, also die Nr verändern?[/QUOTE]
Kommentar
-
Nach dem die Tabellenausgabe funktioniert konnte auch der Versuch gemacht werden eine Tabelle zu sortieren, die Einträge mit Zwischenräume zu nummerieren und in die Ausgangstabelle zurück zu schreiben.
Wie man sieht wird die Reihenfolge sowohl der Gruppen als auch der Bezeichnung innerhalb der Gruppen durch die Nr. festgelegt.
Wer hat Verbesserungsvorschläge?
AnsichtPHP-Code:<?php
include_once ( 'db1.php' );
echo "<h1>".$_SERVER['PHP_SELF']."</h1>";
anmelden_db();
$sql1 = "DROP TABLE verzeichnis1";
echo $sql1."<br>";
$ergebnis = mysql_query($sql1);
$sql2 = "CREATE TABLE verzeichnis1 ";
$sql2 .= "( nr int(5), gruppe text, bezeichnung text ) ";
echo $sql2."<br>";
mysql_query($sql2);
$sql = "INSERT INTO verzeichnis1 VALUES (7,'b','ba'),(9,'a','aa'),(16,'b','bb') ";
$sql .= ",(4,'c','ca') ";
echo $sql."<br>";
mysql_query($sql);
$sql3 = "SELECT * FROM verzeichnis1";
anzeige_verzeichnis($sql3);
$sql4 = "SELECT a.nr, a.gruppe, a.bezeichnung FROM verzeichnis1 AS a ";
$sql4 .= "INNER JOIN verzeichnis1 AS b ON a.gruppe=b.gruppe ";
$sql4 .= "GROUP BY b.gruppe, a.nr ORDER BY b.nr,a.nr";
anzeige_verzeichnis($sql4);
$sql5 = "DROP TABLE verzeichnis2";
echo $sql5."<br>";
$ergebnis = mysql_query($sql5);
$sql = "CREATE TABLE verzeichnis2 ";
$sql .= "( nr int(5) AUTO_INCREMENT, gruppe text, bezeichnung text, PRIMARY KEY (nr) ) ";
echo $sql."<br>";
mysql_query($sql);
$ergebnis = mysql_query($sql4);
while($row = mysql_fetch_object($ergebnis)) {
$sql = "INSERT INTO verzeichnis2 (gruppe, bezeichnung) ";
$sql .= "VALUES ('".$row->gruppe."', '".$row->bezeichnung."') ";
$ergebnis1 = mysql_query($sql); }
$sql = "SELECT * FROM verzeichnis2";
anzeige_verzeichnis($sql);
echo $sql1."<br>";
$ergebnis = mysql_query($sql1);
echo $sql2."<br>";
mysql_query($sql2);
$sql = "INSERT INTO verzeichnis1 (nr,gruppe,bezeichnung) ";
$sql .= "SELECT nr*4,gruppe,bezeichnung FROM verzeichnis2 ";
echo $sql."<br>";
mysql_query($sql);
anzeige_verzeichnis($sql3);
echo $sql5."<br>";
$ergebnis = mysql_query($sql5);
mysql_close();
function anzeige_verzeichnis($sql) {
$ergebnis = mysql_query($sql);
echo "<h2>Verzeichnis</h2>";
echo "<h4>(".$sql.")</h4>";
echo "<table width='30%' border='5' cellpadding='0' cellspacing='2'>";
echo "<tr><th>Nr</th><th>Gruppe</th><th>Bezeichnung</th></tr>";
while($row = mysql_fetch_object($ergebnis)) {
echo "<tr><td>";
echo $row->nr;
echo "</td><td>";
echo $row->gruppe;
echo "</td><td>";
echo $row->bezeichnung;
echo "</td></tr>"; }
echo "</table>"; }
?>
Kommentar
-
Ich habe nen guten Verbesserungsvorschlag, schmeiß dem ganzen mist über Bord und Versuche ernsthaft zu planen und nachzudenken.
Für jedes Verzeichnis ne extra Tabelle ist mist. Stell dir vor du hast 500 Verzeichnisse, oder 20 User hätten jeweils 100 Verzeichnisse. Nun darfst dir vorstellen was das wird.
Deine Funktionen sind käse, die bringen einfach null Mehrwert. Denn Funktionen sollten schon auch im prozeduralen dazu dienen Arbeit abzunehmen und mehrfach in einem oder sogar mehreren Projekten wiederverwendet werden zu können, bei dir ist bei nicht einer Funktion gegeben.
Kommentar

Kommentar