Re: MySQL: Limit Position mit PHP finden

Re: MySQL: Limit Position mit PHP finden

am 10.08.2007 09:46:57 von Claus Reibenstein

Manfred Steiner schrieb:

> Folgende Ausgangsbasis:
>
> Tabelle:
> ID Name
> 1 A
> 2 B
> 3 C
> 4 D
>
> Der User kann nun mittels Navigationsschaltflächen vor und zurück blättern,
> also etwa: SELECT * FROM tabelle ORDER BY name LIMIT $position, 1

Also handelt es sich nicht um eine PHP-, sondern eine SQL-Tabelle. Dann
gehört die Frage nicht hierher, sondern nach
. Ich leite mal um.

> Soweit kein Problem, nur wie finde ich die (Limit) Position heraus wenn ich
> direkt mittels ID auf den Datensatz zugreife: SELECT * FROM tabelle ORDER
> BY name WHERE id = 3

Gar nicht. Diese Abfrage liefert Dir nur einen einzigen Datensatz. Der
einzig sinnvolle Wert für LIMIT ist hier 1.

> Nach dem Direktzugriff möchte der Benutzer mittels Navigation wieder
> vor/zurück blättern können, nur ich suche nun die $position (für die
> nächste Limit abfrage).

Ich verstehe nicht so ganz, was Du genau erreichen möchtest. Entweder
der Benutzer greift per ID direkt auf einen Datensatz zu, oder er
blättert durch mehrere Datensätze durch. Beides zu kombinieren zu
wollen, erscheint mir irgendwie merkwürdig.

Wie auch immer: Mit SQL kannst Du keine LIMIT-Position ermitteln,
sondern nur vorgeben. Diese Positionen sind mit der jeweiligen Query
fest verknüpft. Du wirst Dir da also selber etwas basteln müssen.

> Hat jemand Ideen??

Spontan würde ich sagen: Die gesamte Tabelle einlesen und per PHP den
gesuchten Datensatz ermitteln. Dann hast Du auch seine Position.

Gruß. Claus

Re: MySQL: Limit Position mit PHP finden

am 10.08.2007 13:35:16 von Manfred Steiner

Hallo!

>> Der User kann nun mittels Navigationsschaltflächen vor und zurück blättern,
>> also etwa: SELECT * FROM tabelle ORDER BY name LIMIT $position, 1
>
> Also handelt es sich nicht um eine PHP-, sondern eine SQL-Tabelle. Dann
> gehört die Frage nicht hierher, sondern nach
> . Ich leite mal um.

Nicht unbedingt, da meiner Meinung nach eine Lösung mittels mySQL nicht
möglich ist sondern nur mit PHP?

>> Soweit kein Problem, nur wie finde ich die (Limit) Position heraus wenn ich
>> direkt mittels ID auf den Datensatz zugreife: SELECT * FROM tabelle ORDER
>> BY name WHERE id = 3
>
> Gar nicht. Diese Abfrage liefert Dir nur einen einzigen Datensatz. Der
> einzig sinnvolle Wert für LIMIT ist hier 1.

Stimmt, dass ist das Problem. Ich bräuchte die ROWNUMBER oder so?

>> Nach dem Direktzugriff möchte der Benutzer mittels Navigation wieder
>> vor/zurück blättern können, nur ich suche nun die $position (für die
>> nächste Limit abfrage).
>
> Ich verstehe nicht so ganz, was Du genau erreichen möchtest. Entweder
> der Benutzer greift per ID direkt auf einen Datensatz zu, oder er
> blättert durch mehrere Datensätze durch. Beides zu kombinieren zu
> wollen, erscheint mir irgendwie merkwürdig.

Vergleiche es mit Access und den Navigationsflächen, dort geht das.

Es gibt eine Eingabemaske Stammdaten (Namen + Adressen) wo er einfach
blättert (kein Problem), dann gibt es zb. eine Liste aller Kunden die etwas
bestellt haben. Klickt man da drauf, springt es zu den Stammdaten und jetzt
BLÄTTERT der User. Klar, man könnte hier das blätter einfach deaktivieren.

>> Hat jemand Ideen??
>
> Spontan würde ich sagen: Die gesamte Tabelle einlesen und per PHP den
> gesuchten Datensatz ermitteln. Dann hast Du auch seine Position.

Ist auch die einzige Lösung die mir eingefallen ist, nur zwei Probleme sind
dabei:

1. Speicherbedarf für PHP ist enrom wenn ich die ganze SQL Tabelle in ein
Array einlesen muss
2. Rechenzeit: Eine PHP Schleife + IF durch alle Datensätze bzw. in_array
oder sowas

.... naja, ist in 5min programmiert aber beides sollte eigentlich die
Datenbank und nicht das Frontend machen und ist für mich keine saubere
Lösung ;-)

Lg

Re: MySQL: Limit Position mit PHP finden

am 10.08.2007 15:28:19 von do.not.REMOVETHAT

Manfred Steiner schrieb:

> Vergleiche es mit Access und den Navigationsflächen, dort geht das.
>
> Es gibt eine Eingabemaske Stammdaten (Namen + Adressen) wo er einfach
> blättert (kein Problem), dann gibt es zb. eine Liste aller Kunden die etwas
> bestellt haben. Klickt man da drauf, springt es zu den Stammdaten und jetzt
> BLÄTTERT der User. Klar, man könnte hier das blätter einfach deaktivieren.

Wenn Du das meinst, von dem ich meine, dass Du es meinst, dann ist das
genau so realisiert:

>> Die gesamte Tabelle einlesen und per PHP den
>> gesuchten Datensatz ermitteln. Dann hast Du auch seine Position.

In dem Stammdatenformular ist als Recordset die komplette Tabelle. Es
wird dann mittels FindFirst (komplett im Frontend) auf den
entsprechenden Datensatz gesprungen.

> Ist auch die einzige Lösung die mir eingefallen ist, nur zwei Probleme sind
> dabei:
>
> 1. Speicherbedarf für PHP ist enrom wenn ich die ganze SQL Tabelle in ein
> Array einlesen muss
> 2. Rechenzeit: Eine PHP Schleife + IF durch alle Datensätze bzw. in_array
> oder sowas

IMHO wäre das mit zwei verschachtelten Selects, eines davon mit
Self-Join sauber zu bewerkstelligen. Praktischer ist es aber, wenn Du
Dir die Position in der Liste mittels einem beherzten "select count(*)
from tabelle where name < '$dername'" rausfindest.

Grüße, Matthias

--
http://www.trullala.de
--
Der Trend geht ganz eindeutig zur Zweitsignatur.

Re: MySQL: Limit Position mit PHP finden

am 10.08.2007 15:51:03 von Niels Braczek

Manfred Steiner schrieb:

>> Also handelt es sich nicht um eine PHP-, sondern eine SQL-Tabelle. Dan=
n
>> gehört die Frage nicht hierher, sondern nach
>> . Ich leite mal um.
>=20
> Nicht unbedingt, da meiner Meinung nach eine Lösung mittels mySQL nic=
ht
> möglich ist sondern nur mit PHP?

Das ist ein reines SQL-Problem. Trotzdem hier eine PHP-Funktion, die die
Lösung kapselt:

function prevCurNext($table, $id, $sortField, $sortValue, $condition=3D''=
)
{
if ($condition>'') $condition=3D' AND '.$condition;

// MySQL ab V4.x
$sqlStr =3D "(SELECT $id AS id,
'prev' AS k
FROM $table
WHERE $sortField < $sortValue
$condition
ORDER BY $sortField DESC
LIMIT 0,1)
UNION (SELECT $id AS id,
'cur' AS k
FROM $table
WHERE $sortField =3D $sortValue
$condition)
UNION (SELECT $id AS id,
'next' AS k
FROM $table
WHERE $sortField > $sortValue
$condition
ORDER BY $sortField ASC
LIMIT 0,1)";
$result =3D mysql_query($sqlStr) or die($sqlStr.'
'.mysql_error())=
;
$set =3D array();
while ($row=3Dmysql_fetch_assoc($result)) {
$set[$row['k']] =3D $row['id'];
}
return $set;
}

MfG
Niels

--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------

Re: MySQL: Limit Position mit PHP finden

am 10.08.2007 18:49:19 von Claus Reibenstein

Manfred Steiner schrieb:

>>> Der User kann nun mittels Navigationsschaltflächen vor und zurück blättern,
>>> also etwa: SELECT * FROM tabelle ORDER BY name LIMIT $position, 1
>>
>> Also handelt es sich nicht um eine PHP-, sondern eine SQL-Tabelle. Dann
>> gehört die Frage nicht hierher, sondern nach
>> . Ich leite mal um.

Es wäre nett, wenn Du die Namen der Zitierten stehen lassen würdest.

> Nicht unbedingt, da meiner Meinung nach eine Lösung mittels mySQL nicht
> möglich ist sondern nur mit PHP?

Doch, es gibt eine Lösung mittels SQL. Nur bin ich da nicht drauf gekommen.

>> Ich verstehe nicht so ganz, was Du genau erreichen möchtest. Entweder
>> der Benutzer greift per ID direkt auf einen Datensatz zu, oder er
>> blättert durch mehrere Datensätze durch. Beides zu kombinieren zu
>> wollen, erscheint mir irgendwie merkwürdig.
>
> Vergleiche es mit Access [...]

Womit?

>> Spontan würde ich sagen: Die gesamte Tabelle einlesen und per PHP den
>> gesuchten Datensatz ermitteln. Dann hast Du auch seine Position.
>
> Ist auch die einzige Lösung die mir eingefallen ist, nur zwei Probleme sind
> dabei:
>
> 1. Speicherbedarf für PHP ist enrom wenn ich die ganze SQL Tabelle in ein
> Array einlesen muss

Wer hat denn gesagt, dass Du die Tabelle in ein Array einlesen sollst?
Erstens brauchst Du nur die IDs und den Namen (Sortierkriterium), und
zweitens genügt es, den Resultset durchzuscannen, bis die ID aufgetaucht
ist. Natürlich musst Du dafür jede Zeile in ein Array lesen, aber eben
immer nur eine und nicht alle.

> 2. Rechenzeit: Eine PHP Schleife + IF durch alle Datensätze bzw. in_array
> oder sowas

Das hängt von der Datenmenge ab. Bei Deinem kleinen Beispieltabellchen
dürfte das noch irrelevant sein.

Gruß. Claus

Re: MySQL: Limit Position mit PHP finden

am 10.08.2007 18:54:38 von Claus Reibenstein

Matthias P. Wuerfl schrieb:

> [...] Praktischer ist es aber, wenn Du
> Dir die Position in der Liste mittels einem beherzten "select count(*)
> from tabelle where name < '$dername'" rausfindest.

Natürlich. Klar. Logo. Genau. So einfach geht das. Warum ist mir das
nicht eingefallen? :-(

Ich glaube, ich werde langsam alt.

Gruß. Claus

Re: MySQL: Limit Position mit PHP finden

am 10.08.2007 19:06:30 von Michael Fesser

..oO(Claus Reibenstein)

>Matthias P. Wuerfl schrieb:
>
>> [...] Praktischer ist es aber, wenn Du
>> Dir die Position in der Liste mittels einem beherzten "select count(*)
>> from tabelle where name < '$dername'" rausfindest.
>
>Natürlich. Klar. Logo. Genau. So einfach geht das. Warum ist mir das
>nicht eingefallen? :-(
>
>Ich glaube, ich werde langsam alt.

$this->age--;

SCNR
Micha