Zum Inhalt springen

mysql reguläre expresions


Empfohlene Beiträge

Geschrieben

servas,

 

das weiß sicher wer:

 

ich hab eine tabelle mit x wörtern, wovon ich eines per zufall raussuchen will, das genau n zeichen hat...

 

eigentlich alles ganz leiwand, bis auf die anzahl der zeichen:

 

select * from words order by RAND() limit 0,1

 

das funktioniert, nur jetzt will ich eben nur die wörter mit n buchstaben.

 

 

select * from LIKE '....' words order by RAND() limit 0,1

 

Like wäre ja a gute idee, mit like kann man ja nur so gaga machen wie...like '%blabla%'.

 

dann gibts noch REGEXP, was mir eigentlich auch ned viel bringt, weil das ja nur vergleicht ob etwas matcht...also:

 

SELECT '~' REGEXP '[[.~.]]';

ergibt zb 1.

 

notfalls muss ichs in einer schleife machen, solang abfragen bis das zufallswort 5 zeichen hat...was aber nicht ganz sinn der sache ist. das geht sicher besser. :D

 

lg

d

Geschrieben

ich kann mit adodb welche machen...jo

 

aber das müsste ja auch gehn:

 

select word from words where word REGEXP ".+"

ein beliebiges zeichen, genau einmal...

er gibt aber alle wörter aus... :f:

Geschrieben
jetzt stehe ich aber ein bissi auf der leitung... was genau wills du, dass rauskommt? soll eine tabelle rauskommen? vor allem, wonach soll gesucht werden?

 

ich hab eine table, mit einer spalte.

tabellenname: words

spaltenname: word

 

ich will ein select, was mir zufällig ein wort raussucht, das genau n buchstaben lang ist =)

Geschrieben
ich hab eine table, mit einer spalte.

tabellenname: words

spaltenname: word

 

ich will ein select, was mir zufällig ein wort raussucht, das genau n buchstaben lang ist =)

 

ich glaube nicht, dass das ueberhaupt geht... du kannst den inhalt abfragen, aber jetzt nicht die laenge... da musst du dir was anderes einfallen lassen... so zwischentabellen, oder so.

also, mmir ist zumindest nichts bekannt. sorry.

Geschrieben

Select word from words

where 1=1

and length(word) = n

order by rand()

 

und das ganze pack in ein select, dass dir nur die erste zeile der ergebnismenge zurueckgibt ... wie imma das in MySQL geht

in oracle wuerds vielleicht ca so ausschaun:

 

Select * from (Select word from words

where 1=1

and length(word) = n

order by rand())

where rowid = 1;

 

oder rownum ... wwi :)

 

hoffe es hilft ?

Geschrieben

ich hab oracle schowida vergessn...das einzige was hängenbliebn is sind die transaktions...und so zeugs.

 

limit 0,1 is...:

vom nullten bis zum ersten datensatz.

 

eigentlich würd auch limit 1 reichen :)

Geschrieben

dann wuerd ich noch auf folgendes aufpassen (wieder aus oracle sicht):

intern wird als letztes sortiert. das heisst, mit deinem select in oracle: ich schränke zuerst auf die anzahl der Datensätze ein (in dem fall: einer) und sortier den dann nach "rand()" was nimma viel sinn macht. daher mein subselect. zuerst eine randomized ergebnissmenge, und dann den ersten nehmen.

sonst wuerd ich "immer" den selben satz bekommen .... hoffe des war jetzt halbwegs deutsch, was ich da gschrieben habe ... und das is alles aus Oracle sicht :) keine ahnung was MySQL intern macht ... :)

 

ich hab oracle schowida vergessn...das einzige was hängenbliebn is sind die transaktions...und so zeugs.

 

limit 0,1 is...:

vom nullten bis zum ersten datensatz.

 

eigentlich würd auch limit 1 reichen :)

Geschrieben

jo verstehs schon :)

 

 

bei mysql läuft das eher so ab:

 

select inkl. where wird ausgeführt

dannach wird das result set mittels order by Rand() irgentwie geordnet

und auf das legt er dann erst das limit.

 

aber ich kann das ganze eh auch auf oracle testen...mal schaun ob das mit adodb geht :)

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...