Komplexe MySQL Abfrage & PHP Darstellung

Bash, Shell, PHP, Python, Perl, CGI
xamibor
Posts: 211
Joined: 2003-03-11 16:52

Komplexe MySQL Abfrage & PHP Darstellung

Post by xamibor »

hi,

bei meinem Versuch meine Vorstellung umzusetzen bin ich kläglich gescheitert :-(

Folgendes will ich machen:
Ich habe eine Tabelle wo ca. 300 Datensätze drin sind. Unteranderem die Spalte "UrlaubsUnterkunft".

Ich lese nun die Tabell aus und lasse nach "UrlaubsUnterkunft" Sortieren. Was ohne weiteres klappt. bun will ich die ausgelesenen Daten in eine Tabelle darstellen. Mit einem Hacken!
z.B. Alle Datensätze mit $UrlaubsUnterkunft = "HotelA" sollen in einen "kasten" Tabelle. Darunter alle Datensätze mit $UrlaubsUnterkunft = "HotelB" in einem getreten kasten / Tabelle von HotelA.

Die beiden "Kästen" Sollen jeweils die Ã?berschrifft HotelA bzw. HotelB haben.

wäre dankbar für eine erleuchtung.
lg
Andreas
r00ty
Posts: 747
Joined: 2003-03-17 15:32

Re: Komplexe MySQL Abfrage & PHP Darstellung

Post by r00ty »

ich blicks noch nicht genau wie du es willst, ein kleines Beispiel wäre nett
xamibor
Posts: 211
Joined: 2003-03-11 16:52

Re: Komplexe MySQL Abfrage & PHP Darstellung

Post by xamibor »

Beispiel:


3 Datensätze HotelA

#Tabelle 1
HotelA
termin 1
termin 2
termin 3

# nächste tabelle HotelB mit 2 Datensätze
HotelB
Termin1
Termin2


Diese Datensätze sind alle in einer Tabelle. sollen nun von A-Z sortiert werden dabei sollen alle Termin zu A in einer Tabelle sein und alle Termine von B inder darauf folgende etc.

und das alles mit evtl. (max.) zwei Abfragen per Mysql .....

Köntte natürlich folgendes machen: ich frage ersteinmal alle $UrlaubsUnterkunft ab habe in unserem Beispiel zwei Ergebenise HotelA und HotelB dnach kännte man hergehen und den sql nach HotelA bzw HotelB abfragen und in der schleife alle termin zugehörig zu A bzw B ..... was ich allerdings für schwachsinnig halte.

lg
Andreas
r00ty
Posts: 747
Joined: 2003-03-17 15:32

Re: Komplexe MySQL Abfrage & PHP Darstellung

Post by r00ty »

also entweder bin ich grad völlig benebelt oder es ist nicht ganz so durchsichtig beschrieben:

ist das
#Tabelle 1
HotelA
termin 1
termin 2
termin 3
schon die Ausgabe ?
wenn nein, wie sieht die Orginaltable aus, aus der du die Daten holst ?
das ist ja anscheinend nur eine Tabelle
Diese Datensätze sind alle in einer Tabelle
xamibor
Posts: 211
Joined: 2003-03-11 16:52

Re: Komplexe MySQL Abfrage & PHP Darstellung

Post by xamibor »

sorry liegt warscheinlich drann das ich es selber noch nicht so genau weiß wie :-)

hier der Link:
http://www.christ-online.de/modules.php?name=Freizeiten

du siehst in der Mitte eine Tabelle mit Datensätzen die man oben (über der Tabelle) Sortieren kann. Es geht mir um das Sortier kreterium Unterkunft.

DAs soll dann dargestellt werden wie zuvor beschrieben. ich nutze den begriff tabelle für die HTML Tabelle und nicht für die DB.

lg
Andreas
r00ty
Posts: 747
Joined: 2003-03-17 15:32

Re: Komplexe MySQL Abfrage & PHP Darstellung

Post by r00ty »

okay, jetzt blick ichs
*freu*

also ein wenig Pseudocode:

Code: Select all

while($zeile = mysql_fetch_array($result)) {
  if (strcmp(zeile['Unterkunft'], $AktuelleUnterkunft) != 0) {
    if (strcmp($AktuelleUnterkunft, '') != 0) {
      echo('</table>');
    }
    $AktuelleUnterkunft = zeile['Unterkunft'];
    echo('<table>');
  }
  // hier den rest ausgeben
}
xamibor
Posts: 211
Joined: 2003-03-11 16:52

Re: Komplexe MySQL Abfrage & PHP Darstellung

Post by xamibor »

werde es ausprobieren. muss nur zu einer Vorlesung. deshalb heute abend / morgen es testen :-)

lg
Andreas
xamibor
Posts: 211
Joined: 2003-03-11 16:52

Re: Komplexe MySQL Abfrage & PHP Darstellung

Post by xamibor »

danke es geht!.... schau es dir an ....

lg
Andreas
xamibor
Posts: 211
Joined: 2003-03-11 16:52

Re: Komplexe MySQL Abfrage & PHP Darstellung

Post by xamibor »

habe da ein problem :-(

wenn z.B. keine Unterkunft angeben ist was dann?

und es werden alle angaben zweimal angezeigt .... :-(

lg
Andreas
r00ty
Posts: 747
Joined: 2003-03-17 15:32

Re: Komplexe MySQL Abfrage & PHP Darstellung

Post by r00ty »

hast du es schon selber gelöst ?
wenn nein wo tritt der Fehler auf ?
(beim überfliegen der Seite ist es mir nicht aufgefallen)
xamibor
Posts: 211
Joined: 2003-03-11 16:52

Re: Komplexe MySQL Abfrage & PHP Darstellung

Post by xamibor »

wenn du unter:
http://www.christ-online.de/modules.php?name=Freizeiten

das Sortierelement "Unterkunft" wählst.

werden alle "Unterkünfte" doppelt angezeigt.

lg
Andreas
[monk]
Posts: 163
Joined: 2002-08-09 17:31
Location: Ulm

Re: Komplexe MySQL Abfrage & PHP Darstellung

Post by [monk] »

mal ne frage: warum willst du das ganze mit nur max. 2 Datenbankabfragen lösen ?

Ich arbeite immer so, dass die Rechenarbeit die Datenbank macht und nicht das letzendliche Script. Gut teilweise sind mehr Datenbankabfragen von nöten aber bei Größeren Datenbanken lohnt sich dass auch.

Und es ist im PHP - Code sauberer und übersichtlicher ;o)
r00ty
Posts: 747
Joined: 2003-03-17 15:32

Re: Komplexe MySQL Abfrage & PHP Darstellung

Post by r00ty »

das dürfte eigentlich nicht sein...
wenn du im deiner SQL abfrage als Hauptsortierkriterium 'Unterkunft' hast (und keine doppelten Einträge in der Datenbank vorliegen <- wobei selbst das nicht so dem Ergebnis auf deiner Page führt)
Wenn es nicht zu lange ist kannste das script ja mal posten
xamibor
Posts: 211
Joined: 2003-03-11 16:52

Re: Komplexe MySQL Abfrage & PHP Darstellung

Post by xamibor »

Auszug aus dem Script .... befindet sich in einer SWITCH Schleife:

Code: Select all

 case "unterkunft":

                   $qry_1="SELECT * FROM ".$prefix."_freizeiten
                           WHERE (eventDate>= '$qrydate' or endDate>= '$qrydate')
                           $whereoption
                           order by eventDate asc, endDate asc limit 0,$icount";
                   //echo $qry_1;
               $result_1=sql_query($qry_1, $dbi);
               while($zeile = sql_fetch_array($result_1, $dbi)) {
              // echo $zeile[unterkunft]."<br>";


                              if (strcmp($zeile['unterkunft'], $AktuelleUnterkunft) != 0) {
                                if (strcmp($AktuelleUnterkunft, '') != 0) {
                                  echo('</table>');

                                }
                                $AktuelleUnterkunft = $zeile['unterkunft'];
                                echo "<br><br><b>Unterkunft: $AktuelleUnterkunft</b><br>";
                                 echo "<table width="100%" border="$listtableborder" cellspacing="$listtablecellspacing" cellpadding="$listtablecellpadding" bgcolor="$listbordercolor" bordercolor="$listbordercolor">";
                                 echo "<tr bgcolor="$listheadbgcolor"><td colspan="3" valign="middle"><font color="$listheadtxtcolor" class="content"><b>"._FREVENTDATETEXT."</b></font></td><td  valign="middle"><font color="$listheadtxtcolor" class="content"><b>"._FRSUBTITLE."</b></font>";
                                 echo "</td></tr>";

                    $qry_2="SELECT eid, aid, title, time, hometext, topic, informant, year(eventDate), month(eventDate), dayofmonth(eventDate), hour(startTime), minute(startTime), year(endDate), month(endDate), dayofmonth(endDate), hour(endTime), minute(endTime), alldayevent, barcolor
                       FROM ".$prefix."_freizeiten
                       WHERE (eventDate>= '$qrydate' or endDate>= '$qrydate') $whereoption AND unterkunft='$AktuelleUnterkunft'
                       order by eventDate asc ";

                   $result_2=sql_query($qry_2, $dbi);
                  while(list($eid, $postadmin, $subject, $datePosted, $hometext, $topic, $informant, $y1, $m1, $d1, $h1, $mi1, $y2, $m2, $d2, $h2, $mi2, $alldayevent, $barcolor) = sql_fetch_row($result_2, $dbi)) {
                                                //HIERR

                 // echo "<tr><td colspan="4">UNTERKUNFT: $unterkunft</td></tr>";

                        if ($hometext){
                                $hometext= "$hometext";
                                }
                        else {
                                $hometext= "";
                                }
                        $dateStart = strftime(""._FRSHORTDATEFORMAT."", mktime(0, 0, 0, $m1, $d1, $y1));
                        if ($callistStarttime && !$alldayevent) {
                                $dateStart.= "<br>".strftime(""._FRTIMEFORMAT."", mktime($h1, $mi1, 0, $m1, $d1, $y1));
                                }
                        $dateEnd = strftime(""._FRSHORTDATEFORMAT."", mktime(0, 0, 0, $m2, $d2, $y2));
                        if ($callistEndtime && !$alldayevent) {
                                $dateEnd.= "<br>".strftime(""._FRTIMEFORMAT."", mktime($h2, $mi2, 0, $m2, $d2, $y2));
                                }
                        $popuptext = " onMouseover="pop('".valueToText($subject)."','".valueToText($hometext)."')" onMouseout="kill()"";
                        if ($i==0) { $bgcolornew=$listbgcolor1; $txtcolornew=$listtxtcolor1; $i=1; }
                        else { $bgcolornew=$listbgcolor2; $txtcolornew=$listtxtcolor2; $i=0; }
                        echo "<tr bgcolor="$bgcolornew">
                                <td align="center" nowrap><font color="$txtcolornew" class="content">$dateStart</font></td>
                                <td align="center"><font color="$txtcolornew" class="tiny">"._FRLISTRANGE."</font></td>
                                <td align="center" nowrap><font color="$txtcolornew" class="content">$dateEnd</font></td>
                                <td><font color="$txtcolornew" class="content">";
                        if ($caladmin){
                                echo "<a href="admin.php?op=FreizeitenRemoveEvent&eid=$eid"><img src="$calimagepath/delete.gif" alt=""._FRDELETESTORY."" width="20" height="16" border="0" align="right"></a><a href="admin.php?op=FreizeitenEditEvent&eid=$eid"><img src="$calimagepath/edit.gif" alt=""._EDIT."" width="19" height="17" border="0" align="right"></a>";
                                }
                        echo "&<a href="modules.php?op=modload&name=$module_name&file=index&type=view&eid=$eid" $popuptext>$subject</a>
                        </font></td></tr>";
                                $morelink="modules.php?op=modload&name=$module_name&file=index&type=list&d=$d1&m=$m1&y=$y1&col=$col";
                        }

                      }
                    } // erste while schleife
                //sql_free_result($result);
                //sql_free_result($result_1);
                echo "</table>";

               break;
lg
andreas
r00ty
Posts: 747
Joined: 2003-03-17 15:32

Re: Komplexe MySQL Abfrage & PHP Darstellung

Post by r00ty »

okay,
du musst es als hauptsortierkriterium bei der select anfrage unterkunft nehmen und qals zweitkriterium date
xamibor
Posts: 211
Joined: 2003-03-11 16:52

Re: Komplexe MySQL Abfrage & PHP Darstellung

Post by xamibor »

sorry meine Tochter, Hanna Danielle ist am Freitag gebohren. werde deshalb mich in 1 bis 2 wochen drum kümmern :-)

lg
Andreas
r00ty
Posts: 747
Joined: 2003-03-17 15:32

Re: Komplexe MySQL Abfrage & PHP Darstellung

Post by r00ty »

alles klar....
herzlichen Glückwunsch :)

bis in ein paar Wochen dann
xamibor
Posts: 211
Joined: 2003-03-11 16:52

Re: Komplexe MySQL Abfrage & PHP Darstellung

Post by xamibor »

so da bin ich wieder ... leider hat die abfrage durch de veränderrung des sql nicht bewirkt.


http://www.christ-online.de/modules.php?name=Freizeiten

Problem ist die "Freizeiten" ohne angabe zu Unterkunft nicht in einem Block gezeigt werden :-(

Gruß
Andreas
r00ty
Posts: 747
Joined: 2003-03-17 15:32

Re: Komplexe MySQL Abfrage & PHP Darstellung

Post by r00ty »

also erstmal ist es a weng komisch, dass zu 2 Datenbankabfragen verwendest... Das leuchtet mir nicht ein

Code: Select all

$qry_1="SELECT * FROM ".$prefix."_freizeiten 
                           WHERE (eventDate>= '$qrydate' or endDate>= '$qrydate') 
                           $whereoption 
                           order by eventDate asc, endDate asc limit 0,$icount"; 
mit dieser Query bekommst du doch eine Tabelle zurück in der alle Infos drinnenstehen, die du zur Ausgabe brauchst (beim query muss nach 'unterkunft' als Hauptkriterium sortiert werden - das ist noch nicht drinnen)
neuer Query:

Code: Select all

$qry_1="SELECT * FROM ".$prefix."_freizeiten 
                           WHERE (eventDate>= '$qrydate' or endDate>= '$qrydate') 
                           $whereoption 
                           order by unterkunft asc, eventDate asc, endDate asc limit 0,$icount"; 
xamibor
Posts: 211
Joined: 2003-03-11 16:52

Re: Komplexe MySQL Abfrage & PHP Darstellung

Post by xamibor »

ich habe zwei sql gemacht ein mal wegen der darstellung der verschiedenen Unterkünfte und zum anderen wegen der ordnung der freizeiten innerhalb der Unterkünft ... hier de aktuelle code ...

Code: Select all

                   $qry_1="SELECT * FROM ".$prefix."_freizeiten
                           WHERE (eventDate>= '$qrydate' or endDate>= '$qrydate')
                           $whereoption
                           order by unterkunft asc";
                   //echo $qry_1;
               $result_1=sql_query($qry_1, $dbi);
               while($zeile = sql_fetch_array($result_1, $dbi)) {
              // echo $zeile[unterkunft]."<br>";


                              if (strcmp($zeile['unterkunft'], $AktuelleUnterkunft) != 0) {
                                if (strcmp($AktuelleUnterkunft, '') != 0) {
                                  echo('</table>');

                                }
                                $AktuelleUnterkunft = $zeile['unterkunft'];
                                echo "<br><br><b>Unterkunft: $AktuelleUnterkunft</b><br>";
                                 echo "<table width="100%" border="$listtableborder" cellspacing="$listtablecellspacing" cellpadding="$listtablecellpadding" bgcolor="$listbordercolor" bordercolor="$listbordercolor">";
                                 echo "<tr bgcolor="$listheadbgcolor"><td colspan="3" valign="middle"><font color="$listheadtxtcolor" class="content"><b>"._FREVENTDATETEXT."</b></font></td><td  valign="middle"><font color="$listheadtxtcolor" class="content"><b>"._FRSUBTITLE."</b></font>";
                                 echo "</td></tr>";

                    $qry_2="SELECT eid, aid, title, time, hometext, topic, informant, year(eventDate), month(eventDate), dayofmonth(eventDate), hour(startTime), minute(startTime), year(endDate), month(endDate), dayofmonth(endDate), hour(endTime), minute(endTime), alldayevent, barcolor
                       FROM ".$prefix."_freizeiten
                       WHERE unterkunft='$AktuelleUnterkunft' AND (eventDate>= '$qrydate' or endDate>= '$qrydate') $whereoption
                       order by unterkunft asc, eventDate asc ";

                   $result_2=sql_query($qry_2, $dbi);
                  while(list($eid, $postadmin, $subject, $datePosted, $hometext, $topic, $informant, $y1, $m1, $d1, $h1, $mi1, $y2, $m2, $d2, $h2, $mi2, $alldayevent, $barcolor) = sql_fetch_row($result_2, $dbi)) {
                                                //HIERR

                 // echo "<tr><td colspan="4">UNTERKUNFT: $unterkunft</td></tr>";

                        if ($hometext){
                                $hometext= "$hometext";
                                }
                        else {
                                $hometext= "";
                                }
                        $dateStart = strftime(""._FRSHORTDATEFORMAT."", mktime(0, 0, 0, $m1, $d1, $y1));
                        if ($callistStarttime && !$alldayevent) {
                                $dateStart.= "<br>".strftime(""._FRTIMEFORMAT."", mktime($h1, $mi1, 0, $m1, $d1, $y1));
                                }
                        $dateEnd = strftime(""._FRSHORTDATEFORMAT."", mktime(0, 0, 0, $m2, $d2, $y2));
                        if ($callistEndtime && !$alldayevent) {
                                $dateEnd.= "<br>".strftime(""._FRTIMEFORMAT."", mktime($h2, $mi2, 0, $m2, $d2, $y2));
                                }
                        $popuptext = " onMouseover="pop('".valueToText($subject)."','".valueToText($hometext)."')" onMouseout="kill()"";
                        if ($i==0) { $bgcolornew=$listbgcolor1; $txtcolornew=$listtxtcolor1; $i=1; }
                        else { $bgcolornew=$listbgcolor2; $txtcolornew=$listtxtcolor2; $i=0; }
                        echo "<tr bgcolor="$bgcolornew">
                                <td align="center" nowrap><font color="$txtcolornew" class="content">$dateStart</font></td>
                                <td align="center"><font color="$txtcolornew" class="tiny">"._FRLISTRANGE."</font></td>
                                <td align="center" nowrap><font color="$txtcolornew" class="content">$dateEnd</font></td>
                                <td><font color="$txtcolornew" class="content">";
                        if ($caladmin){
                                echo "<a href="admin.php?op=FreizeitenRemoveEvent&eid=$eid"><img src="$calimagepath/delete.gif" alt=""._FRDELETESTORY."" width="20" height="16" border="0" align="right"></a><a href="admin.php?op=FreizeitenEditEvent&eid=$eid"><img src="$calimagepath/edit.gif" alt=""._EDIT."" width="19" height="17" border="0" align="right"></a>";
                                }
                        echo "&<a href="modules.php?op=modload&name=$module_name&file=index&type=view&eid=$eid" $popuptext>$subject</a>
                        </font></td></tr>";
                                $morelink="modules.php?op=modload&name=$module_name&file=index&type=list&d=$d1&m=$m1&y=$y1&col=$col";
                        }

                      }
                    } // erste while schleife
                //sql_free_result($result);
                //sql_free_result($result_1);
                echo "</table>";
vielen dank für deine ausdauerende Hilfe .... ein selten heit :-)

Gruss
Andreas Buis