PDA

Braktis arkiven dhe shih këtë faqe në dizajn standard : Perl mit MYSQL


mirdita
10.07.2001, 14:54:00
Përshëndetje për të gjith,
më nevojitet ndihma juaj, përse me Statement/in në vazhdim nuk mund të lexoj kunden me Nr. më të madh rendorë!!! Më jepni ndonjë propozim ...
$mySQLStatement = SELECT kundennr, kundenname FROM kunde WHERE kundenname (SELECT max(kundennr) from kunde);
$sth = $dbh->prepare($mySQLStatement);

$sth->execute();

flatliner
10.07.2001, 15:47:00
hi,
probier's mal so:

SELECT kundennr, kundenname FROM kunde ORDER BY kundennr DESC;

dann müsste dir eigentlich die die höchste kundennummer am anfang anzeigen ("absteigen!)

den rest kannst vergessen /phpBB/images/smiles/icon_wink.gif


melde dich obs geklappt
/phpBB/images/smiles/icon_cool.gif flatliner

flatliner
10.07.2001, 16:23:00
tung edhe njehere, sdi sa me kuptove:(

sipas mendimit tim ske nevoje te perdorish funktionin MAX() pasi ske per te llogaritur asgje!

mjafton te perdoresh ORDER BY si dhe DESC per te lexuar (SELECT) kunden me (WHERE)kundennr me te madh rendor. keshtu (ORDER BY)rradhohen kundet me kundennr me te madh me se larti(DESC)...ata me me te vogel me poshte. do te duhej te funksiononte /phpBB/images/smiles/icon_wink.gif

tung
/phpBB/images/smiles/icon_cool.gif flatliner

Meni
10.07.2001, 16:42:00
<TABLE BORDER=0 ALIGN=CENTER WIDTH=85%><TR><TD><font size=-1>Quote:</font><HR></TD></TR><TR><TD><FONT SIZE=-1><BLOCKQUOTE>
mirdita shkruajti me 2001-07-10 15:54 :
Përshëndetje për të gjith,
më nevojitet ndihma juaj, përse me Statement/in në vazhdim nuk mund të lexoj kunden me Nr. më të madh rendorë!!! Më jepni ndonjë propozim ...
$mySQLStatement = SELECT kundennr, kundenname FROM kunde WHERE kundenname (SELECT max(kundennr) from kunde);
$sth = $dbh->prepare($mySQLStatement);

$sth->execute();
</BLOCKQUOTE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE>

flatliner;
ketij i duhet me sa kuptova vetem kunde me numrin me te madh e jo te gjithe kundet prandaj i duhet MAX-Befehl!


mirdita;
provo kete:

Select kunden_id, kundename from kunde where kunden_id IN (select max(kunden_id) from kunde );


gabimi ne statmentin tend qendron ne (shiko "bold)":
SELECT kundennr, kundenname FROM kunde WHERE kundenname (SELECT max(kundennr) from kunde);

aty nuk duhet kundenname por kundennr (respektivisht kunden_id) ngase selecti i dyte bazohet ne kundennr, prandaj aty ishte gabimi!

kete statment e provova ne SQL-Abfrage, dhe funkcionon.
Suksese...


shendet,
Meni



<font size=-1>[ Ky Mesazh u ndryshua nga: Meni më 2001-07-10 17:44 ]</font>

Meni
10.07.2001, 16:51:00
mund edhe te mos perdoresh IN-komanden.
...edhe kjo funkcionon:

Select kunden_id, kundenname from kunde where kunden_id = (select max(kunden_id) from kunde );

Meni

flatliner
10.07.2001, 17:22:00
tung meni,
sigurisht edhe nje mundesi, kjo e jotja /phpBB/images/smiles/icon_wink.gif
mbasi edhe po funksionon, atehere edhe me mire.
fatkeqesisht s'kam ketu ne pune mySQL te installuar (vetem FOXPRO, Oracle) per te testuar...do e provoj kur te mberri ne shtepi.

grüsse
/phpBB/images/smiles/icon_cool.gifflatliner

flatliner
10.07.2001, 17:27:00
aber meni, eigentlich ist mein vorschlag gar nicht so verkehrt, wenn ich mir das überleg. ich mein er kriegt ja den kunden mit der grössten kundennr. zwar einige andere auch aber maj /phpBB/images/smiles/icon_wink.gif evtl. könnte er wohl den LIMIT (anzahl datensätze) hinten dran noch gebrauchen. war mir aber an dieser nicht ganz sicher /phpBB/images/smiles/icon_frown.gif

servus
/phpBB/images/smiles/icon_cool.gifflatliner

Meni
31.07.2001, 17:56:00
flatliner,

hast du mal versucht das SQL-Komando: LIMIT in DB Interbase-Abfrage einzubauen?

Ich schon aber das Problem: nämlich das geht nicht! SQL für Intebase (+ PostgreSQL) kennt dieses Befehl nicht!

Kennst du eine andere Befehl anstatt LIMIT um die erste 10 Einträge aus DB abzufragen bzw selektieren (bei Oracle wie du erwähnt hast wäre LIMIT(0,10)?

Anstaat mehrere Unterabfrage einzubauen, würde mich interessieren ob eine eindeutige SQL-Kommando dafür gibt!

gruss, Meni

P.S.
Die Frage ist keine Provokation!

guiWithJava
26.10.2001, 15:56:00
hi, wo habt ihr Pelr und MySQL gelernt. Fuer Uni's ist das zu billig und in real life braucht man das.

Tung guiWithJava

monni
01.12.2001, 10:58:00
@meni, flatliner
in ansi-sql muss man TOP verwenden, wenn man die ersten n Sätze selektieren will... das ist der Anfang des Syntax-Baumes v. Select:

SELECT
[ ALL | DISTINCT ]
[
TOP n
| TOP n PERCENT
| TOP n WITH TIES
| TOP n PERCENT WITH TIES
]
[* | column...]
[ INTO ... ]
[ FROM ... ]
[ ... JOIN ... ]
[ WHERE ... ]
[ GROUP BY ... ]
[ HAVING ... ]
[ UNION ... ]
[ ORDER BY ... ]
[ COMPUTE ... ]
[ FOR BROWSE ... ]
[ OPTION ... ]


Beispiel:
Select top 10 * from kunden where ...;
oder
select top 10 percent * from ...;


Ausserdem:

Den Vorschlag von Meni:
"Select kunden_id, kundenname from kunde where kunden_id = (select max(kunden_id) from kunde );" finde ich besser (trifft d. Nagel auf d. Kopf) als die Konstruktion von flatliner... selbst wenn man top einbaut und sagt selektiere den 1. datensatz von der sortierten reihe.
Es ist einfach performanter... und das müsstest du wissen lieber flatliner, wenn ihr an der arbeit oracle verwendet... zur erinnerung und zum vergleich der performance die erklärung:
-> max ist eine aggregatfunktion und die sind bekanntlich schnell, d.h. das RDBMS (z.B. Oracle) würde ohne großen aufwand die höchste Zahl "errechnen" (Oracle speichert diese Zahl sogar für interne Zwecke). Da kunden_id eindeutig (schlüssel = primary key) ist folgt, das kunden_id indiziert ist, d.h. mit höchstens 3 Zugriffen würde Oracle (bei ander DBSystemen ähnlich schnell) den Datensatz eindeutig rauspicken! Das ist die schnellste Möglichket!
-> Zum Vergleich dein Konstrukt:
"SELECT kundennr, kundenname FROM kunde ORDER BY kundennr DESC;" funktioniert auch... soweit so gut..., aber wenn du 1000 kunden hast müssen 1000 datensätze von der Platte gelesen werden (wir brauchen nur 1!) und dort sortiert werden. Dann kann man sich den 1. greifen... aber stellt dir vor du hast 10000 kunden das sind 10 mal mehr... NUN der aufwand um die daten zu bearbeiten wächst in etwa quadratisch, d.h. bei 10x mehr kunden 100x länger warten... dabei ist der zugriff über index immer gleich schnell (theoretisch, also +- 2%) egal wie viele datensätze.

Gruß
Monni