"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

PHP Frage -->mysql

grOOvekill@ 29.10.2002 - 09:14 1623 38
Posts

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
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

Kitemaniac
Avatar
Registered: Sep 2001
Location: Longshore / West..
Posts: 712
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:
Bearbeitet von Maxx666 am 30.10.2002, 12:44

grOOvekill@

Legend
Vienna Badass
Avatar
Registered: Nov 2001
Location: @home
Posts: 2301
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

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
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???
Bearbeitet von watchout am 30.10.2002, 14:48

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
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@

Legend
Vienna Badass
Avatar
Registered: Nov 2001
Location: @home
Posts: 2301
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

Kitemaniac
Avatar
Registered: Sep 2001
Location: Longshore / West..
Posts: 712
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@

Legend
Vienna Badass
Avatar
Registered: Nov 2001
Location: @home
Posts: 2301
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]);
}
Bearbeitet von grOOvekill@ am 30.10.2002, 15:10

Maxx666

Kitemaniac
Avatar
Registered: Sep 2001
Location: Longshore / West..
Posts: 712
hast du die query schon ausgeführt und gesehen das was rauskommt?

grOOvekill@

Legend
Vienna Badass
Avatar
Registered: Nov 2001
Location: @home
Posts: 2301
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

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
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
Bearbeitet von watchout am 30.10.2002, 15:28

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
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

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
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

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
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@

Legend
Vienna Badass
Avatar
Registered: Nov 2001
Location: @home
Posts: 2301
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
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz