PHP Frage -->mysql - Seite 2

Seite 2 von 3 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/php_frage_gtmysql_53258/page_2 - zur Vollversion wechseln!


watchout schrieb am 30.10.2002 um 03:06

Zitat von Maxx666
select max(id) from dvd;
oder
select * from dvd
order by id desc limit 1;

wennst die datensätze nicht auch wieder rauslöschst, sodass löcher entstehen und diese wieder befüllt werden.
:confused: also, ich weiss jetzt nicht ganz wie ich den letzten satz verstehen soll, auf jeden fall funktioniert keine der oberen formen, wenn 'Löcher' entstehen, und diese wieder befüllt werden - ehrlichgesagt weiss ich garnicht, ob das mysql überhaupt so macht.

falls dem so ist, musst du halt ein datum-feld hinzufügen, dann kannst du das simpel und 100% richtig mit
SELECT * FROM dvd WHERE datum=MAX(datum);
oder halt
SELECT * FROM dvd ORDER BY datum DESC LIMIT 1;
aber ich glaub ersteres is schneller...


(puh, sql is auch schon wieder lang her :D)


Maxx666 schrieb am 30.10.2002 um 12:40

Zitat von watchout
...

also bei meiner mysql datenbank entstehen löcher...die auch wieder, nach einen noch nicht genauer gecheckten modi, befüllt werden.
vielleicht ists ja auch einstellungssache. hab mich noch nie genauer damit beschäftigt. egal.

ein datumsfeld, eliminiert allerdings die problematik...schon richtig ;)

btw: deine erste abfrage funktioniert nicht! :rolleyes:


grOOvekill@ schrieb am 30.10.2002 um 14:10

kuckt mal:

habe ein verschachteltes select gemacht, das eigentlich genau das anzeigt, was ich brauche:

$aktuell=(mysql_query("select titel from dvd where id=(SELECT max(id) FROM dvd)"));

und dann ein:

printf ("%s",$aktuell);

Aber da tut sich goar nüscht!
Schon wieder was vergessen?


watchout schrieb am 30.10.2002 um 14:43

Zitat von Maxx666
also bei meiner mysql datenbank entstehen löcher...die auch wieder, nach einen noch nicht genauer gecheckten modi, befüllt werden.
vielleicht ists ja auch einstellungssache. hab mich noch nie genauer damit beschäftigt. egal.

ein datumsfeld, eliminiert allerdings die problematik...schon richtig ;)

btw: deine erste abfrage funktioniert nicht! :rolleyes:
((hast du ein datum-feld gemacht? nein - dass wette ich :D)) <--- personen vertauscht :rolleyes:

löcher haben mich bis jetzt noch garnicht interessiert... hab wo ichs gebraucht hab immer ein datum-feld verwendet...
warum sollte erstere abfrage nicht funktionieren???


Ringding schrieb am 30.10.2002 um 14:45

Wie schon einmal in diesem Thread beschrieben, liefert mysql_query ein Result, das du dann erst z.B. mit mysql_fetch_array auslesen musst.


grOOvekill@ schrieb am 30.10.2002 um 14:56

Das habe ich mittlerweile schon versucht. Hier mein Versuch:


$result = mysql_query("select titel from dvd where id=(SELECT max(id) FROM dvd)");
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
printf ("Aktuellster Film: %s", $row);
}


Ich krieg aber trotzdem eine Fehlermeldung. Sorry, daß ich Euch hier so lange auf die Nerven damit gehe, aber ich komme eher aus der C-Richtung und tu noch nicht so lange in PHP.


Maxx666 schrieb am 30.10.2002 um 14:58

Zitat von grOOvekill@
Das habe ich mittlerweile schon versucht. Hier mein Versuch:


$result = mysql_query("select titel from dvd where id=(SELECT max(id) FROM dvd)");
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
printf ("Aktuellster Film: %s", $row);
}


Ich krieg aber trotzdem eine Fehlermeldung. Sorry, daß ich Euch hier so lange auf die Nerven damit gehe, aber ich komme eher aus der C-Richtung und tu noch nicht so lange in PHP.


printf ("Aktuellster Film: %s", $row[0]); sollte es schon sein ;)


grOOvekill@ schrieb am 30.10.2002 um 15:05

Mann, ich werd' noch bekloppt! Das haut einfach nicht hin. Hab schon fast jede erdenkliche Variante ausprobiert.

Nachdem ich dachte, daß es möglicherweise am MYSQL_NUM liegt (gibt ja angeblich nur numerische Indezes aus) , habe ich es mit MYSQL_ASSOC probiert. Geht auch nicht.

Wie genau muß ich ein Array auslesen? Ich hab's genauso probiert wie auf php.net beschrieben, ohne Erfolg. Langsam wird das eine Prinzipsache hier. Ich befürchte, ich kann heute nacht nicht einschlafen, wenn ich nicht auf die Lösung komme.

Trotzdem bin ich weiterhin dankbar für jeden Rat. ;)

Hier übrigens meine letzte Version:

$result = mysql_query("select titel from dvd where id=(SELECT max(id) FROM dvd)");
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
printf ("Aktuellster Film: %s", $row[0]);
}


Maxx666 schrieb am 30.10.2002 um 15:12

hast du die query schon ausgeführt und gesehen das was rauskommt?


grOOvekill@ schrieb am 30.10.2002 um 15:15

Ja. Genau das, was ich brauche. Die innere Abfrage bekommt die id mit der größten zahl. Die äußere vergleicht die id's und zeigt automatisch den Titel des Filmes an, der diese id hat, also automatisch der letzte Eintrag. Hab's testhalber sogar im Access ausprobiert. Sogar dort hat's hingehauen.


watchout schrieb am 30.10.2002 um 15:22

Zitat von grOOvekill@
Ja. Genau das, was ich brauche. Die innere Abfrage bekommt die id mit der größten zahl. Die äußere vergleicht die id's und zeigt automatisch den Titel des Filmes an, der diese id hat, also automatisch der letzte Eintrag. Hab's testhalber sogar im Access ausprobiert. Sogar dort hat's hingehauen.
zeig mal mit echo die result-ressource an
edit: oder besser mit print_r


atrox schrieb am 30.10.2002 um 15:27

afiak werden subselects bei mysql erst ab version 4.1 unterstützt. versuch doch lieber die version mit ... ORDER BY id DESC LIMIT 1.


watchout schrieb am 30.10.2002 um 15:38

Zitat von atrox
afiak werden subselects bei mysql erst ab version 4.1 unterstützt. versuch doch lieber die version mit ... ORDER BY id DESC LIMIT 1.
korrekt:
Zitat
MySQL Server currently only supports nested queries of the form INSERT ... SELECT ... and REPLACE ... SELECT .... You can, however, use the function IN() in other contexts. Subselects are currently being implemented in the 4.1 development tree.


atrox schrieb am 30.10.2002 um 15:48

subselects> seit jahren überfällig bei mysql... ausserdem auf meiner wishlist:
*) tree-walking
*) constrains
*) views
*) unions
man könnte sagen "dann nimm doch gleich oracle" - nur braucht das mindestens 32mb + 16mb pro database :( [oder irgendwie so - ist schon lang her dass ich mir das durchgelesen habe]


grOOvekill@ schrieb am 30.10.2002 um 16:02

Verstehe, verstehe. Tja, da kann ich's mit einem Subselect lang versuchen. Man sollte halt vorher nachsehen, bevor man sich dumm und dämlich ärgert. Wie auch immer, ich hab es mittlerweile mit Watchout's Variante: select * from dvd
order by id desc limit 1;
geschafft, daß der letzte Eintrag angezeigt wird.

Tausend Dank an alle, die sich Gedanken um mein Problem gemacht haben!

Ich liebe Euch!!!

:D




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025