Zum Inhalt springen

mysql reguläre expresions


bigair
 Teilen

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 =)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

 Teilen

×
×
  • Neu erstellen...