Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
LIMIT mit MSSQL geht nicht?! [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
LIMIT mit MSSQL geht nicht?!


 
MoRtAlAn
11-01-2002, 16:02 
 
Ist einem bekannt wie mit MSSQL eine SELECT abfrage starte und die Ausgabe begrenzen kann => LIMIT 0,5 ??

Bei mir geht das irgendwie nicht und in der Doku steht dazu auch nichts drin

gruss

 
JoelH
11-01-2002, 16:15 
 
also LIMITist MySQL spezifisch, ich kenne keine Entsprechung dazu.

 
MoRtAlAn
11-01-2002, 16:29 
 
geht das irgendwie anders ??

ich habs mal mir For-schleife probiert, das wollte aber nicht so ganz

if ($num_rows) {
for ($i == 1; $i >= 2; $i++) {
$row = mssql_fetch_object($result);
echo $row->head."<br>";
}
} else {....


oder kann ich bei einer While-anweisung zwei Bedingungen angeben oder die while anweisung mit break() unterbrechen ??

Ich weiß, viele Fragen auf einmal, aber was will man machen :-))

THX

 
MoRtAlAn
11-01-2002, 16:36 
 
Problem hat sich von Selbst gelöst, trotzdem aber danke!

Wenn es interessiert:

$counter = 0;
while ($counter < 2) {
$row = mssql_fetch_object($result);
echo "<tr class=\"tblbody\"><td colspan=\"2\"><table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" width=\"95%\" align=\"center\">";
echo "<tr class=\"tblbody2\"><td colspan=\"2\"><b>$row->head</b></td></tr>";
echo "</table></td></tr>";
$counter++;
}

Is zwar ein bischen länger als LIMIT 0,2 aber was solls :-)))

gruss

 
Berni
11-01-2002, 17:14 
 
limit mit mssql geht! ich glaube das war first oder so...
Ich habe leider keine ms-Doku mehr auf meine priv-rechner, versuchs einfach mal bei http://www.microsoft.com direkt.

 
MoRtAlAn
11-01-2002, 17:42 
 
meinst du vielleicht den Befehl ??

SELECT FIRST 2 FROM db ??

Werd ich gleich am Mo. ausprobieren!

THX

 
pekka
11-01-2002, 17:48 
 
SELECT TOP 10 FROM...
irgendwie so

 
MoRtAlAn
13-01-2002, 20:14 
 
Also das funktioniert, aber es haut nicht hin, wenn ich eine bestimmte Anzahl an Datensätzen ab einem bestimmten Entrag haben will wie LIMIT 20,10.

Hab das mal probiert, habs aber nicht hinbekommen :-((

Eine Alternative hätte ich zwar, aber das kann es nicht sein, da das auch viel zu Ressourcenlastig wäre!
Beispiel (while-Schleife):

$anfang = 10;
$anzahl = 10;
$counter = 1

while ($row-mssql_fetch_object) {
if (($counter == anfang) && ($counter <= ($anfang + $anzahl))) {
zeige an
$counter++
} else {
zeige nicht
counter++
}

Und per Link halt neue $anfang - Werte zuweisen.

Bei ein paar hundert Datensätzen mag das ja noch egal sein, aber was mache ich, wenn ich ein paar 10.000 habe ??
Irgendwie kann das nicht der Weisheit letzter Schluß sein!!

Vielleicht fällt einem ja mal was ein

gruss

 
felix_a
16-06-2003, 14:46 
 
Hallo,

ich weiß, der Thread ist schon 'ne Weile her, aber hast du inzwischen eine Lösung gefunden? Ich stehe nämlich gerade vor dem selben Problem und möchte eigentlich keine Schleife bauen, weil meine DB jetzt schon mit ca. 8.000 Einträgen geplant wird.
Wäre über Infos dankbar!

Und was das für ein Quatsch ist, dass es LIMIT nur bei MySQL gibt!!! Absolut unverständlich!

Gruß,
Felix

 
MoRtAlAn
16-06-2003, 14:56 
 
LIMIT ist eben kein SQL-Standard!

ich hatte das Problem damals mit mssql_data_seek gelöst... such danach mal im PHP Manual!

gruss

 
felix_a
16-06-2003, 15:14 
 
Alles klar, danke.
Da kommt man wohl um Schleifen bauen nicht drumrum...
Schade - einfacher wäre es schöner, wie immer eigentlich.
Naja, man hat ja sonst nichts vor.
Gruß,
Felix

 
olli.bu
13-06-2004, 11:02 
 
Hallo,
1 Jahr später und das gleiche Problem.
Mit dem mssql_data_seek verstehe ich nicht wirklich.
Ich finde auch kein Beipsiel, wie das funktionierne koennte.
Habt Ihr vielleicht ein Beipsiel für mich??

Gruss
Olli

 
wahsaga
13-06-2004, 12:59 
 
Original geschrieben von olli.bu
Mit dem mssql_data_seek verstehe ich nicht wirklich.
Ich finde auch kein Beipsiel, wie das funktionierne koennte.
hast du bereits ins manual geschaut, was der befehl macht?

na fein - dann ist die "lösung" doch einfach.

du liest einfach alle datensätze aus, bewegst dich dann mit mysql_data_seek() bis zum x-ten datensatz, und liest von dort aus dann y datensätze in einer schleife aus.

somit hättest du dann die wirkung des LIMIT von mysql emuliert.

(allerdings frage ich mich wirklich, ob es dazu bei mssql wirklich keine performantere entsprechung geben soll ...?)

 
olli.bu
13-06-2004, 13:58 
 
Hallo erst mal herzlichen Dank für dei schnelle Antwort,

aber entweder raff ich es heute nicht, oder ich will es nicht verstehen.

wo kann ich denn dieses data_seek einsetzen.

Meine querys sehen wie folgt aus.


$query = "Select *from tblTest";
$result = mssql_query($query);
$num = mssql_num_rows($result);

for($i=0;$i<$num; $i++)
{
$spalte1 = mssql_result($result,$i, "spalte1");
$spalte2 = mssql_result($result,$i, "spalte2");
$spalte3 = mssql_result($result,$i, "spalte3");

print "$spalte1, $spalte2, $spalte3}

Wo muss ich den jetzt da data_seek einbauen? und wo die schleife??
Wäre prima, wenn du mir noch mal helfen koenntest.

Gruss
Olli

 
wahsaga
13-06-2004, 15:17 
 
na komm, so scher isses doch wohl wirklich nicht ...

deshalb gibt's auch nur pseudo-code, umsetzen darfst du selber *g*

du willst LIMIT imitieren, welches ja bekanntlich von einem startwert aus eine bestimmte anzahl von datensätzen zurückliefert.

also,
alle datensätze aus der DB auslesen
ergebniszeiger auf dem datensatz mit der nummer startwert positionieren (ja, hier kommt mssql_data_seek ins spiel)
in einer schleife jetzt anzahl mal einen datensatz auslesen und anzeigen
das dürfte m.E. auch schon alles sein.

 
Patrick_PQ
15-06-2004, 09:30 
 
Hallo zusammen,

es gibt auch noch eine andere Möglichkeit sofern ein Primärschlüssel verfügbar ist. Mit folgender SQL-Syntax lassen sich die Datensätze 21-30 ermitteln:

SELECT TOP 10 * FROM DeineTabelle where ID not in
(SELECT TOP 20 ID FROM DeineTabelle ORDER BY ID) ORDER BY ID

Das jetzt noch in eine Prozedur mit Parametern für TOP X und alles in exec einschließen (weil sonst kein Parameter für TOP benutzt werden kann) und wir haben eine Art Limit für MSSQL ...

Wichtig ist order by - die Sortierung muss für beide Querys gleich sein! In Oracle kann man sich soetwas mit der Funtion "Rownum" basteln - vergleichbares habe ich bei mssql leider nicht gefunden.

 
php-anfaenger
17-06-2004, 01:10 
 
Mit ADODB machste einfach:

$result = $db->SelectLimit("$dein_query" ,$start,$end);

Also nur eine Zeile, hoffe das hilft Dir !

Natürlich nur sofern du ADODB verwenden möchtest.

http://php.weblogs.com/adodb


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:27 Uhr.