Page 1 of 1

Komplexe MySQL Abfrage & PHP Darstellung

Posted: 2003-09-16 13:28
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

Re: Komplexe MySQL Abfrage & PHP Darstellung

Posted: 2003-09-16 14:00
by r00ty
ich blicks noch nicht genau wie du es willst, ein kleines Beispiel wäre nett

Re: Komplexe MySQL Abfrage & PHP Darstellung

Posted: 2003-09-16 14:15
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

Re: Komplexe MySQL Abfrage & PHP Darstellung

Posted: 2003-09-16 14:26
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

Re: Komplexe MySQL Abfrage & PHP Darstellung

Posted: 2003-09-16 14:43
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

Re: Komplexe MySQL Abfrage & PHP Darstellung

Posted: 2003-09-16 15:46
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
}

Re: Komplexe MySQL Abfrage & PHP Darstellung

Posted: 2003-09-16 15:50
by xamibor
werde es ausprobieren. muss nur zu einer Vorlesung. deshalb heute abend / morgen es testen :-)

lg
Andreas

Re: Komplexe MySQL Abfrage & PHP Darstellung

Posted: 2003-09-17 15:18
by xamibor
danke es geht!.... schau es dir an ....

lg
Andreas

Re: Komplexe MySQL Abfrage & PHP Darstellung

Posted: 2003-09-17 15:35
by xamibor
habe da ein problem :-(

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

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

lg
Andreas

Re: Komplexe MySQL Abfrage & PHP Darstellung

Posted: 2003-09-17 23:20
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)

Re: Komplexe MySQL Abfrage & PHP Darstellung

Posted: 2003-09-18 08:19
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

Re: Komplexe MySQL Abfrage & PHP Darstellung

Posted: 2003-09-18 09:00
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)

Re: Komplexe MySQL Abfrage & PHP Darstellung

Posted: 2003-09-18 12:39
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

Re: Komplexe MySQL Abfrage & PHP Darstellung

Posted: 2003-09-19 21:48
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

Re: Komplexe MySQL Abfrage & PHP Darstellung

Posted: 2003-09-20 00:31
by r00ty
okay,
du musst es als hauptsortierkriterium bei der select anfrage unterkunft nehmen und qals zweitkriterium date

Re: Komplexe MySQL Abfrage & PHP Darstellung

Posted: 2003-09-22 20:55
by xamibor
sorry meine Tochter, Hanna Danielle ist am Freitag gebohren. werde deshalb mich in 1 bis 2 wochen drum kümmern :-)

lg
Andreas

Re: Komplexe MySQL Abfrage & PHP Darstellung

Posted: 2003-09-22 22:24
by r00ty
alles klar....
herzlichen Glückwunsch :)

bis in ein paar Wochen dann

Re: Komplexe MySQL Abfrage & PHP Darstellung

Posted: 2003-10-06 09:31
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

Re: Komplexe MySQL Abfrage & PHP Darstellung

Posted: 2003-10-06 09:54
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"; 

Re: Komplexe MySQL Abfrage & PHP Darstellung

Posted: 2003-10-06 15:57
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