select distinct

adisresic

Neuer Benutzer
Beiträge
4
Also ich bastele schon seit 3 Jahren an einen Buchungsprogramm.

Habe da eine Kalender Funktion gebastel wo man Zeitlinien der einzelnen Betten sehen kann.

Also den Belegungsplan. Ich habe das Problem bei 2 verschachtelten While Schleifen.

Die erste Selectiert mit:

$resob=mysql_query("select distinct objektid
from
anzeigen
WHERE
gebucht='0' ");

Nun zeight er mir immer nur einmal die Objektid als Vorkommen nur ein mal an.

Das Problem in der Tabbele gibt es die Spalte bis als Datum und die brauche ich auch synchron zur Objektid
zu veiterverarbeitung in der zweiten Schleife.

Wie bekomm ich das hin.

Danke im voraus für eure Hilfe!

Noch dazu gesagt funktioniert der Kalender "Belegungsplan" auch.
Nur ist das Problem bei dem aufbau der Horitontalen Kalenderansicht einer Monats, dass
es unötige Daten der Vormonat wie auch der weiteren Monate in der Zukunft selectiert.

Wenn dann einer 20 Zimmer hat und man das auf ein Jahr rechnet, selectiert er vieleicht 1000
Datensätze unötig da Theoretisch der Kalender horitontal für ein Jahr aufgebaut wird = Serverabsturz:) Aber zu sehen ist nur ein Monat der 20 Zimmer!
 
Zuletzt bearbeitet:
Werbung:
Entferne das DISTINCT aus deiner Abfrage. Dann erhältst du die gleiche objektid auch mehrfach.

Allerdings habe ich den Eindruck, dass du hier eine Aufgabe der Datenbank in PHP lösen willst. Hilfreich wäre hier zusätzlich die zweite Abfrage und eine Beschreibung von dem Problem das du lösen willst.

Gruß
Hony

Nachtrag:
Ein Aufbau der Tabelle wäre auch sehr hilfreich. ;)
 
Zuletzt bearbeitet:
Das Problem hab ich jetzt noch dazugeschrieben. Aber die Frage ist auch wie man das erklärt.

Es soll nur das vorkommen einer Objekt id ermitteld werden doch brauche ich auch das bis Datum zu objektid.

Aber wenn ich so nachdenke dann kann man die Spalte bis garnicht zuordnen. Wenn du gut bist vieleicht verstehst du es wenn du den gesamten Cod sichst.

$order = 'ORDER BY reihenfolge ASC, zimmernummer ASC';

$resob=mysql_query("select distinct objektid from anzeigen WHERE gebucht='0' and gebucht!='1' and gebucht!='2' and gebucht!='3' and register!='1' and archiv!='archiv' and zimmerart!='Kurzurlaub 5 Tage' and zimmerart!='Kurzurlaub 4 Tage' and zimmerart!='Kurzurlaub-5' and zimmerart!='Kurzurlaub-4' and owner='$IDUser' $order");


$anzalanzeigen = mysql_num_rows($resob);

if($anzalanzeigen == 0)
{
echo $anzalanzeigen;die;
}


echo '<div id="schlissen"><a href="javascript:wegtabelle()">[X]</a></div>';
echo '<div id="containertabelle">';


while($resultatob=mysql_fetch_assoc($resob))
{
$objektid = $resultatob['objektid'];
$farbatagenichtfrei = '';
$texte = '';
$bisrech = $resultatob['bis'];

echo $bisrech;

$res=mysql_query("SELECT ident,von,bis,zimmernummer,farbe,land,bundesland,objektstrasse,zimmerart,objektpostl FROM anzeigen WHERE objektid='$objektid' and gebucht='0' and gebucht!='1' and gebucht!='2' and gebucht!='3' and register!='1' and archiv!='archiv' and zimmerart!='Kurzurlaub 5 Tage' and zimmerart!='Kurzurlaub 4 Tage' and zimmerart!='Kurzurlaub-5' and zimmerart!='Kurzurlaub-4' and von>= '$vonrech' and owner='$IDUser' $order");

$ar = mysql_num_rows($res);

echo $ar;


$wochentagarray = array();
$dateinanzeigebis = array();
$dateinanzeige = array();
$tagem = array();

$buchung =0;


while($resultat2=mysql_fetch_assoc($res))
{
$ident = $resultat2['ident'];
$zimmernummer = $resultat2['zimmernummer'];
$land = $resultat2['land'];
$bundesland = $resultat2['bundesland'];
$objektstrasse = $resultat2['objektstrasse'];
$objektpostl = $resultat2['objektpostl'];
$zimmerart = $resultat2['zimmerart'];





if('Ferienwohnung' == $zimmerart)
{
$farbatagenichtfrei = '#'.$resultat2['farbe'];
$texte = $objektstrasse.'<br>'.$objektpostl.'<br>'.$zimmerart;
}
else
{
$texte = $zimmernummer.' '.$zimmerart;
$farbatagenichtfrei = '#FF8B00';
}

$res3=mysql_query("select bild from bilder where owner='$IDUser' and ident='$ident' limit 1");
$bildident = mysql_fetch_assoc($res3);
$bildid = $bildident['bild'];

if($zimmerart != 'Einzelzimmer' and $zimmerart != 'Doppelzimmer' and $zimmerart != 'Apartment' and $zimmerart != 'Behindertengerecht' and $zimmerart != 'Doppelzimmer Superior' and $zimmerart != 'Kurzurlaub 4 Tage' and $zimmerart != 'Kurzurlaub 5 Tage' and $zimmerart != 'Ferienwohnung')
$multi_Eingabe = 'Bucheneingabe_eigenes_produkt_insite_Tabelle';

if($zimmerart == 'Einzelzimmer' or $zimmerart == 'Doppelzimmer' or $zimmerart == 'Apartment' or $zimmerart == 'Behindertengerecht' or $zimmerart == 'Doppelzimmer Superior')
$multi_Eingabe = 'Bucheneingabe_Standard_zimmer_insite_tabelle';

if($zimmerart == 'Ferienwohnung')
$multi_Eingabe = 'Bucheneingabe_Tabelle_ferienwohnung_inste_tabelle';


$vonb = $resultat2['von'];
$bisb = $resultat2['bis'];

$von1 = $resultat2['von'];
$bis1 = $resultat2['bis'];


$tag2 = substr($bis1,-2);
$monat2 = substr($bis1, -5,2);
$jahr2 = substr($bis1,0,-6);

$tag1 = substr($von1,-2);
$monat1 = substr($von1,-5,2);
$jahr1 = substr($von1,0,-6);

$von1 = $tag1.'-'.$monat1.'-'.$jahr1;
$bis1 = $tag2.'-'.$monat2.'-'.$jahr2;




for($i=1;$i<=$tage;$i++)
{
$datum= mktime(0, 0, 0,$m,$i,$Y);


$wochentag = date("D", $datum);
$wochentagarray[$i]=$wochentag;





$von=strtotime($von1);
$bis=strtotime($bis1);

$filename = "../../../bilder/".$bildid;
@list($width, $height) = getimagesize($filename);

if($bildid == '')
{
$filename = "../../../bilder/kein-bild.jpg";
@list($width, $height) = getimagesize($filename);
$bildid = "kein-bild.jpg";
}





if($datum < $von or $datum > $bis)
{
$tagem[$buchung][$i]=0;
$dateinanzeigevon[$buchung][$i]=$von1;
$dateinanzeigebis[$buchung][$i]=$bis1;

$dateinanzeigevon1[$buchung][$i]=$vonb;
$dateinanzeigebis2[$buchung][$i]=$bisb;
$identio[$buchung][$i]=$ident;
}

else
{
$tagem[$buchung][$i]=1;
$dateinanzeigevon[$buchung][$i]=$von1;
$dateinanzeigebis[$buchung][$i]=$bis1;

$dateinanzeigevona[$buchung][$i]=$vonb;
$dateinanzeigebisb[$buchung][$i]=$bisb;
$identio[$buchung][$i]=$ident;

}
}





$buchung = $buchung+1;
}


$tagem2 = array();



echo '<center><table cellpadding="0" style="width: auto;">';

for($i2=0;$i2<$buchung;$i2++)
{
for($i=0;$i<=$tage;$i++)
{
if($tagem[$i2][$i]==1)
{
$tagem2[$i]=1;
}

}
}


for($i2=0;$i2<$buchung;$i2++)
{
for($i=0;$i<=$tage;$i++)
{
if($tagem[$i2][$i]==1)
{
$tagem2[$i]=1;
$datepoint1[$i] = $dateinanzeigevon[$i2][$i];
$datepoint2[$i] = $dateinanzeigebis[$i2][$i];

$identar[$i] = $identio[$i2][$i];
$datepoint1a[$i] = $dateinanzeigevona[$i2][$i];
$datepoint2b[$i] = $dateinanzeigebisb[$i2][$i];
}
echo $datepoint[$i];
}
}



for($iz = 1 ; $iz <= $tage ; $iz++)
echo '<td style="border: 1px solid #000000;width: '.$qudratgrosse.';height: '.$qudratgrosse.';background-color:'.$farbetage.';text-align: center;"><div style="width: '.$qudratgrosse.'; height: '.$qudratgrosse.';background-color: '.$farbetage.';padding: '.$padding.';"><font size="'.$fontsize.'" color="'.$fontcollor.'">'.$wochentagarray[$iz].'</font></div></td>';


echo'<tr></tr>';




for($i=1;$i<=$tage;$i++)
{

$datum = mktime(0, 0, 0,$m,$i,$Y);

$datumausgabe = date("d-m-Y", $datum);
$zeit = time();

$datumausgabe2 = date("d-m-Y", $zeit);




if($tagem2[$i]==1)
{
$keinlink = ' href="javascript:buchenanzeigen(\''.$IDUser.'\',\''.$identar[$i].'\',\''.$datepoint1[$i].'\',\''.$datepoint2[$i].'\',\''.$objektid.'\',\''.$multi_Eingabe.'\',\''.$num.'\',\''.$m.'\',\''.$Y.'\')"';
if($datumausgabe2 == $datumausgabe)
{
echo '<td style="border: 1px solid #000000;width: '.$qudratgrosse.';height: '.$qudratgrosse.';text-align: center;background-color:'.$farbaktuellertag.'"><div style="width: '.$qudratgrosse.';height: '.$qudratgrosse.';padding: '.$padding.';background-color:'.$farbaktuellertag.';" onmouseover="Lade_bild(\''.$bildid.'\',\'Schloss_Granitz\',\'von '.$datepoint1[$i].' bis '.$datepoint2[$i].'\');" onmouseout="Bild_Weg()"><a '.$keinlink.'><font size="'.$fontsize.'" color="'.$fontcollor.'">'.$i.'</font></a></div></td>';
}
else
{
echo '<td style="border: 1px solid #000000;width: '.$qudratgrosse.';height: '.$qudratgrosse.';background-color:'.$farbatagefrei.';text-align: center;"><div style="width: '.$qudratgrosse.';height: '.$qudratgrosse.';background-color:'.$farbatagefrei.';padding: '.$padding.';" onmouseover="Lade_bild(\''.$bildid.'\',\'Schloss_Granitz\',\'von '.$datepoint1[$i].' bis '.$datepoint2[$i].'\');" onmouseout="Bild_Weg()"><a '.$keinlink.'><font size="'.$fontsize.'" color="'.$fontcollor.'">'.$i.'</font></a></div></td>';
}
}

else
{
if($datumausgabe2 == $datumausgabe)
{
echo '<td style="border: 1px solid #000000;width: '.$qudratgrosse.';height: '.$qudratgrosse.';text-align: center;background-color:'.$farbaktuellertag.';"><div style="width: '.$qudratgrosse.';height: '.$qudratgrosse.';padding: '.$padding.';background-color:'.$farbaktuellertag.';"><font size="'.$fontsize.'" color="'.$fontcollor.'"><a '.$keinlink.'>'.$i.'</a></font></div></td>';
}
else
{
$keinlink = '';
echo '<td style="border: 1px solid #000000;width: '.$qudratgrosse.';height: '.$qudratgrosse.';text-align: center;background-color:'.$farbatagenichtfrei.';"><div style="width: '.$qudratgrosse.';height: '.$qudratgrosse.';background-color:'.$farbatagenichtfrei.';padding: '.$padding.';" ><a '.$keinlink.'><font size="'.$fontsize.'" color="'.$fontcollor.'"><a '.$keinlink.'>'.$i.'</a></font></a></div></td>';
}
}
}


echo '<td style="border: 1px solid #000000;width: '.$qudratgrosse.';height: '.$qudratgrosse.';text-align: center;background-color:#00C600;padding:3px;width:250px;">'.$texte.' </td><td style="border: 1px solid #000000;width: '.$qudratgrosse.';height: '.$qudratgrosse.';text-align: center;background-color:#BEBEC0;padding: 5px;"><a href="javascript:tabellezuruck(\''.$m.'\',\''.$Y.'\')" style="color: #000000;padding: 5px;"><<<<</a></td><td style="border: 1px solid #000000;width: '.$qudratgrosse.';height: '.$qudratgrosse.';text-align: center;background-color:#FF8800;padding: 5px;"> '.$m.' '.$Y.' </td><td style="border: 1px solid #000000;width: '.$qudratgrosse.';height: '.$qudratgrosse.';text-align: center;background-color:#BEBEC0;padding: 5px;"><a href="javascript:tabelleweiter(\''.$m.'\',\''.$Y.'\')" style="color: #000000;">>>>></a></td></table>';


echo '<hr style="color: red; background: blue; height: 15px;" />';
}
 
Ah ja ich glaub das Problem zu verkennen. Die Tabelle besteht aus 49 Spalten und relevant sind nur spalten von bis objektid.

Damit rendere ich die Tabelle.


Entferne das DISTINCT aus deiner Abfrage. Dann erhältst du die gleiche objektid auch mehrfach.

Allerdings habe ich den Eindruck, dass du hier eine Aufgabe der Datenbank in PHP lösen willst. Hilfreich wäre hier zusätzlich die zweite Abfrage und eine Beschreibung von dem Problem das du lösen willst.

Gruß
Hony

Nachtrag:
Ein Aufbau der Tabelle wäre auch sehr hilfreich. ;)
 
4.png


So sieht der kalender aus nur das man es sich vorstellen kann!

Ich denke mein gröstes Problem ist was man einen MYSQL Server denn so zumuten kan.
 
Zuletzt bearbeitet:
Was ich dir jetzt schreibe soll weder arrogant noch entmutigend sein. Erstens fallen Meister nach wie vor nicht vom Himmel und zweitens ist Programmieren für dich wohl eher ein Hobby als dein täglich Brot. Ich denke aber, dass wir mit der deutlichen Worten schneller zu einer Lösung kommen.

Ich hab mir sowohl den Code als auch die Querys kurz angesehen. Und leider ist das alles ziemlich hässlich. Ich fürchte ich kann dir nur dann eine halbwegs befriedigende Antwort geben wenn du mir den Tabellenaufbau sowie möglichst einige Beispieldaten zugänglich machst. Das müssen natürlich keine echten Daten sein! Künstliche Daten oder anonymisierte reichen völlig. Auch reichen so circa 10-20 Datensätze.

Hilfreich ist hier SHOW COLUMNS.

Dann können wir gerne Schritt für Schritt eine sinnvolle und tragfähige Lösung suchen.

Ah ja ich glaub das Problem zu verkennen. Die Tabelle besteht aus 49 Spalten und relevant sind nur spalten von bis objektid.
Das ist ein recht deutlicher Hinweis auf ein schlechtes Datenbankdesign.

Ich denke mein gröstes Problem ist was man einen MYSQL Server denn so zumuten kan.
MySQL kann man im Grunde eine Menge zumuten. Ich glaube ehrlich gesagt auch, dass in diesem Fall nicht MySQL sonder PHP der Flaschenhals ist obwohl du den Datenbankserver schon ziemlich belastest.

Wenn dann einer 20 Zimmer hat und man das auf ein Jahr rechnet, selectiert er vieleicht 1000
Datensätze unötig da Theoretisch der Kalender horitontal für ein Jahr aufgebaut wird = Serverabsturz:) Aber zu sehen ist nur ein Monat der 20 Zimmer!
1000 Datensätze sind für ein Datenbanksystem eigentlich ein Witz. Das könnte sogar ein Smartphone leisten. In deinem Fall können daraus aber 1001 Abfragen werden. Das kann selbst potente Server in die Knie zwingen.
 
Werbung:
Ich würde sagen deinem Eingangscode
Code:
select distinct objektid
from
anzeigen
WHERE
gebucht='0'
kann doch einfach mit AND datum_bis <= letzter Tag des Zeitraums den du selektieren willst erweitert werden. Sinnvoll wäre Start und Ende zu berechnen und nur diese Daten dann auch wirklich von der Datenbank abzufragen.

Ansonsten stimme ich Hony% zu, dein Code :confused: Nutze SQL richtig und bau nicht 1000 Schleifen.
 
Zurück
Oben