Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Jeden zweiten Datensatz aus der Datenbank lesen

Frage Entwicklung PHP

Mitglied: badrulecracker

badrulecracker (Level 1) - Jetzt verbinden

29.03.2006, aktualisiert 30.03.2006, 8693 Aufrufe, 8 Kommentare

Hi,

ich hab da mal eine kleine Frage,

immoment suche ich jeden Datensatz aus einer Tabelle heraus, benutze danach allerdings nur jeden zweiten.
Meine momentane Lösung ist eine PHP Variable names $zaehler, die ich in der while schleife immer so hinpole, wie ich es gerade brauche, damit nur jeder zweite datensatz angezeigt wird.

Hintergrund ist eine Art Kalender für mehrere Geräte (Vermietungssoftware). Nun habe ich der Datenbank für jedes Gerät für jeden Tag 13 Einträge (Von 8-18 Uhr), in denen ich ein Status vergeben habe (0 --> frei, 1 --> entliehen, 2 --> defekt). Die Zeitangabe wird als PHP Timestamp gespeichert.

Wenn man sich nun aber eine Übersicht von z.B 40 Geräte ansieht, dann dauert es extrem lange, bis die Seite aufgebaut wird. Beispiel:
$sql="
SELECT
entliehen.status,
entliehen.zeitpunkt
FROM
entliehen
WHERE
entliehen.geraet='".$row0['id']."'
AND
entliehen.zeitpunkt>='$time_start_monat'
AND
entliehen.zeitpunkt<='".get_ende_monat($time_start_monat)."'
ORDER BY
entliehen.zeitpunkt;";

$result = mysql_query($sql) OR die(mysql_error());
$uhrzeit_zaehler = 0;

$anzeige_zaehler = 1;
while($row = mysql_fetch_array($result))
{
$uhrzeit_zaehler++;

if(date("G",$row['zeitpunkt']) == 8)
{
echo "<td>";
}
if($anzeige_zaehler == 1)
{
if($row['status'] == 0) echo "<a id='...' href='...'>&nbsp;</a>";
elseif($row['status'] == 2) echo "<a id='...' href='...'>&nbsp;</a>";
else echo "<a id='...' href='...'>&nbsp;</a>";
}

if(date("G",$row['zeitpunkt']) == 18)
{
echo "</td>\n";
$uhrzeit_zaehler = 0;
}
if($anzeige_zaehler == 1 AND
date("G",$row['zeitpunkt']) != 18)
$anzeige_zaehler = 0;
else $anzeige_zaehler = 1;
}

Dass ich nur jeden 2. Datensatz anzeige, hat damit zu tun, dass wenn man das so macht, wie ich das realisiert habe, die Tabelle sehr breit wird. Daher soll nur jeder 2. Datensatz angezeit werden (8 Uhr, 10 Uhr usw.)

Jetzt wollte ich fragen, ob es eine Möglichkeit gibt, bereits in SQL zu sagen, dass man nur jeden zweiten Datensatz haben möchte, damit man nicht die Menge an daten hat und dann der Seitenaufbau schneller von statten geht.

Vielleicht habt ihr ja auch noch sonst andere Ideen, um den Seitenaufbau schneller zu machen.

Vielen dank im Vorraus,

mfg, brc
Mitglied: Dani
29.03.2006 um 09:45 Uhr
Hi,
also direkt in MySQL geht das nicht (was mein Wissen angeht). Aber du kannst das mit PHP ganz easy abfragen. Mach einfach ne Vari. Die zählst du jedesmal um 1 hoch. Wenn Sie dann % (Modulo 2 == 0 ist) Dann soll er den Datensatz rauslesen.

Beispiel:
01.
$rest=0; 
02.
 
03.
$sql="SELECT entliehen.status, entliehen.zeitpunkt FROM entliehen WHERE entliehen.geraet='".$row0['id']."' AND entliehen.zeitpunkt>='$time_start_monat' 
04.
AND entliehen.zeitpunkt<='".get_ende_monat($time_start_monat)."' ORDER BY 
05.
entliehen.zeitpunkt LIMIT $rest, 1;"; 
06.
$result=mysql_query($sql); 
07.
while($row=mysql_fetch_array($result)) 
08.
09.
    if($rest%2 == 0) 
10.
11.
    .... //DEINE SACHEN 
12.
13.
    $rest++; 
14.
  }
So müsste es theoretisch gehen!

Gruß
Dani
Bitte warten ..
Mitglied: pi314
29.03.2006 um 09:49 Uhr
Kommt darauf an, was für eine DB du benutzt. Bei MySQL funktioniert mein Tipp soviel ich weiß nicht, bei Oracle aber schon:

Benutze rownum... (so werden die Zeilen in der DB durchnummeriert)
allerdings kommt es hierbei darauf an, wie die Sätze gespeichert wurden (der Reihenfolge nach oder nicht)

Probieren geht über studieren...

01.
SELECT ... 
02.
<b>WHERE ( rownum % 2 ) = 0</b>
Bitte warten ..
Mitglied: badrulecracker
29.03.2006 um 09:54 Uhr
hi,

vielen dank für die antworten.

diesen tip habe ich auch schon gelesen, bei mysql kann man mod = 0 zum beispiel mit der id koppeln, doch leider sind meine daten nicht der richtigen reinfolge nach in der db eingetragen...

mfg, brc
Bitte warten ..
Mitglied: Biber
29.03.2006 um 12:16 Uhr
Moin badrulecracker,

ich würde es so versuchen:

$sql="
SELECT
entliehen.status,
entliehen.zeitpunkt
FROM
entliehen
WHERE
entliehen.geraet='".$row0['id']."'
AND
(EXTRACT(HOUR from entliehen.zeitpunkt) %2)= 0
and
entliehen.zeitpunkt>='$time_start_monat'
AND
entliehen.zeitpunkt<='".get_ende_monat($time_start_monat)."'
ORDER BY
entliehen.zeitpunkt;";

Gruß
Biber
Bitte warten ..
Mitglied: 25768
29.03.2006 um 16:08 Uhr
Hallo,

es wäre sehr hilfreich wenn du deine kompletten SHOW CREATE TABLE tbl posten würdest.
Hab das dumpfe Gefühl das dein DB Design sehr redundant ist.

Wenn das angepasst ist kannst du das in jeder DB mit einem INNER JOIN lösen.

Gruß
Andi
Bitte warten ..
Mitglied: badrulecracker
29.03.2006 um 16:43 Uhr
Hi,

also du hast recht, die Datenbank ist definitiv redundant. Denn es gibt bei mir folgende Tabellen:

kunden, geräte, entliehen, entliehen_info, defekt_info..

In Kunden: Kundeninformationen
In Geräte: Geräteinformationen
In entliehen: spalten: geraet, zeitpunkt, status,info_id (Hier wird für jedes Gerät für jeden Zeitpunkt der Wert entweder 0 = Frei, oder 1= beleget vergeben. Es gibt 11 Zeitpunkte pro Tag pro Gerät (von 8-18 Uhr) Das heißt momentan ca 70 Geräte = 70 * 11 * 365 * 3 Jahre.
Momentwan bin ich bai 1.200.000 Datensätzen.
In entliehen_info: Startzeitpunkt, Endzeitpunkt, geraet, kunde
In defekt_info: siehe entliehen_info

Nun dieses Datenbankkostrukt ist der absolute Schwachsinn, dass weiss ich, aber wie man es normalerweise machen würde, mit einer tabelle entliehen und da nur die startzeitpunkte und endzeitpunkte von den entliehenden Geräten mit kundenangabe machen würde, so kann ich es leider nicht ausgeben.
Ich habe es leider bisher nicht geschafft, das so auszugeben, deswegen über diese kleine oder auch große Hilfstabelle.

Naja, vielleicht hat ja einer eine Idee, wie ich soetwas dann ausgeben kann?...

Es soll eine monatsanricht von allen Geräten sein. Heißt also alle Geräte untereinander und dann nach links die Datumsangaben für einen Monat.

So sieht es bisher aus. ( Jedes Tabellenfeld beinhaltet 11 Links mit den Zeitpunkten):
http://www.oldenburgersv.de/test/leihfix.jpg

Aussehen soll es vielleicht so:
http://www.oldenburgersv.de/test/leihfix3.jpg

Vielleicht hat ja jemand eine Idee...

mfg, brc
Bitte warten ..
Mitglied: 25768
29.03.2006 um 18:38 Uhr
Ich hab versucht das ganze jetzt nochmal zu kapieren, hab alles nochmal durchgelesen.

Ich versteh jetzt aber nicht warum du nur jeden zweiten Datensatz brauchst.
Bitte warten ..
Mitglied: badrulecracker
30.03.2006 um 09:32 Uhr
Jeden zweiten Datensatz einfach nur deshalb, weil wenn ich für jeden datensatz ausgebe, dann wird die Tabelle einfach zu breit. ich möchte gerne, dass das Bild auf ein 1024x768 Auflösung passt. Deswegen nur jeden zweiten. Es soll aber die Datensätze auch geben, die nicht angezeigt werden, da wenn ich eine andere darstellung habe, zum beispiel nur ein Gerät und dann eine Woche, das die Angaben dort genauer sind...

mfg, brc
Bitte warten ..
Ähnliche Inhalte
PHP
PHP soll Datensätze in der Datenbank überprüfen
Frage von YanmaiPHP2 Kommentare

Hallo ihr Administratoren ;) Ich habe eine Datenbanktabelle "Freundschaftsanfragen". Wenn Benutzer a Benutzer b eine Freundschaftsanfrage schickt, dann wird ...

Datenbanken
Access Datenbank wie am einfachsten Datensätze aufbereiten
Frage von Dr.CornwallisDatenbanken5 Kommentare

Liebe Gemeinde, ich brauche eure Hilfe, wie würdet ihr in Access 2010 eine Datenbank aufbauen bzw. die ug. Anforderungen ...

Microsoft Office
Access 2013, Verweis von formularfeld zu datensatz in anderer Datenbank
gelöst Frage von MuseumMLMicrosoft Office8 Kommentare

Hallo, in meiner Zeichnungsdatenbank hat es Hinweise auf bestimmte Skulpturen, welche mit der Zeichnung in Beziehung stehen (und umgekehrt). ...

Administrator.de Feedback
Was machen wenn man die Werbung nicht lesen kann?
gelöst Frage von BassFishFoxAdministrator.de Feedback10 Kommentare

Hallo Frank , Gegen Werbung habe ich ja nix. Aber was ist mit Werbung die man nicht lesen kann? ...

Neue Wissensbeiträge
Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 8 StundenBatch & Shell8 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Humor (lol)

"gimme gimme gimme": Automatischer Test stolpert über Easter Egg im man-Tool

Information von Penny.Cilin vor 10 StundenHumor (lol)6 Kommentare

Interessant, was man so alles als Easter Egg implementiert. Ist schon wieder Ostern? "gimme gimme gimme": Automatischer Test stolpert ...

MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 1 TagMikroTik RouterOS8 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Sicherheit

Sicherheitslücke in HP-Druckern - Firmware-Updates stehen bereit

Information von BassFishFox vor 1 TagSicherheit1 Kommentar

Ein weiterer Grund, dass Drucker keinerlei Verbindung nach "auswaerts" haben sollen. Unter Verwendung spezieller Malware können Angreifer aus der ...

Heiß diskutierte Inhalte
Windows Server
RDP macht Server schneller???
Frage von JaniDJWindows Server17 Kommentare

Hallo Community, wir betrieben seit geraumer Zeit diverse virtuelle Maschinen und Server mit Windows Server 2012. Leider haben wir ...

Windows 10
Windows 10 dunkler Bildschirm nach Umfallen
Frage von AkcentWindows 1015 Kommentare

Hallo, habe hier einen Windows 10 Rechner der von einem User umgefallen wurde (Beine übers Knie, an den PC ...

Windows 10
Bitlocker nach Verschlüsselung nicht mehr aufrufbar!
gelöst Frage von alexlazaWindows 1013 Kommentare

Hallo, ich besitze ein HP ZBook 17 G4 mit einem Windows 10 Pro Betriebssystem. Bei diesem Problem handelt sich, ...

Batch & Shell
Neuste Datei via PowerShell kopieren
gelöst Frage von kaiuwe28Batch & Shell11 Kommentare

Hallo zusammen, ich hatte mir mit Hilfe der Suche im Forum einen kleinen Code von colinardo rausgesucht und versucht ...