SQL: Auslesen von Daten > ein wert, danach alle < wert

Hi!

Ich würde mit SQL gern folgendes Auslesen: zuerst in einer Tabelle alle Werte, die größer sind als ein bestimmter Wert, wobei von denen der kleinste am Anfang steht und nach diesen Werten kommen dann alle die kleiner/gleich sind. Hoff ich hab das verständlich geschrieben. Wer eine Idee?

mfg

Am ehesten denke ich wirst du hier fündig.

Cheers

danke, aber das problem ist eigentlich, dass es zwei abfragen sind, wobei die ergebnis-zeilen hintereinander gereiht werden sollen :wink:


echo “

”;
while(abfrage1 ausgeben)
{
echo “”;
echo ";
while(abfrage2 ausgeben)
{
echo ;
}
echo “”;
}
echo “
"ausgabe1ausgabe2
”;

hm jo danke, gibts da nicht eine Möglichkeit wie man das im SQL-Befehl machen kann?

kannst du bitte nochmal genau erklären was du haben magst?
ich schreib dir den code dann.

also: ich möchte aus einer tabelle zuerst alle zeilen auslesen, die in der spalte “zeit” einen wert größer als x haben, nach den ganzen ergebnissen sollen dann die zeilen sein, die in “zeit” einen wert kleiner-gleich x haben. hoff das ist verständlich, danke!

okay ich schreib dir da mal was

[code]<?php
define(MYSQL_HOSTNAME, “hostname”);
define(MYSQL_BENUTZERNAME, “benutzername”);
define(MYSQL_PASSWORT, “passwort”);
define(MYSQL_DATENBANK, “datenbankname”);
$db = mysqli_connect(MYSQL_HOSTNAME, MYSQL_BENUTZERNAME, MYSQL_PASSWORT, MYSQL_DATENBANK);
/Host, Benutzername, Benutzerpasswort, Datenbankname/
if (mysqli_connect_errno()) {
die (‘Konnte keine Verbindung zur Datenbank aufbauen: ‘.mysqli_connect_error().’(’.mysqli_connect_errno().’)’);
}
$timestamp_zum_vergleichen = “Hier den Timestamp oder ähnliches rein”;
$sql = "SELECT
*
FROM
tabelle WHERE Timestamp > $timestamp_zum_vergleichen ";

$sql2 = "SELECT
*
FROM
tabelle WHERE Timestamp <= $timestamp_zum_vergleichen ";

$result = $db->query($sql);
$result2 = $db->query($sql2);
if (!$result) {
die ('Konnte den Folgenden Query nicht senden: '.$sql."
\nFehlermeldung: “.$db->error);
}
if (!$result2) {
die ('Konnte den Folgenden Query nicht senden: '.$sql2.”
\nFehlermeldung: ".$db->error);
}
if (!$result->num_rows) {
echo ‘

Es gibt keine Einträge mit einem höheren Vergleichswert

’;
}
if (!$result2->num_rows) {
echo ‘

Es gibt keine Einträge mit einem niedrigeren oder gleichen Vergleichswert

’;
}
else
{
echo “”;
while ($row = $result->fetch_assoc() OR $row2 = $result2->fetch_assoc())
{
echo “”;
}
echo “
$row[“eintrag zum ausgeben”] $row2[“eintrag zum ausgeben”]
”;
}
?>[/code]
probier das mal.

dev.mysql.com/doc/refman/5.1/en/union.html

@lenz und @chrisb danke!!

:hail: :hail:

klappt es denn?
wie hast du es abgewandelt, dass es klappt?

hab die UNION-Version verwendet

( SELECT * FROM tbl WHERE zeit >= NOW() ) 
UNION 
( SELECT * FROM tbl WHERE zeit < NOW() )

so ungefähr

Kleiner Nachtrag: Besser die Variablen in den Queries (oder generell) mit dem Punkt verbinden, anstatt sie direkt in den String zu schreiben - letzteres ist nicht eindeutig und schlechter Stil.

[quote=“stgr”]hab die UNION-Version verwendet

( SELECT * FROM tbl WHERE zeit >= NOW() ) 
UNION 
( SELECT * FROM tbl WHERE zeit < NOW() )

so ungefähr[/quote]
Das macht aber nicht viel sinn…

doch macht es! zuerst alle zeilen größer gleich einem datum und danach alle die kleiner sind :ps:

Das “macht” nur dann Sinn, wenn du bei beiden Teilmengen eine andere Sortierung haben willst (das schriebst du ja anfangs glaube ich auch).

Aber so, wie gezeigt, also ohne eine Sortierung, ist es wirklich eher sinnfrei.