Tach,
dein Code weist einige Schwächen auf.
1. mysql_fetch_array sollte man nicht verwenden, sondern lieber mysql_fetch_assoc oder noch schneller mysql_fetch_row
Siehe php Manual => mysql_fetch_array => Kommentar von robjohnson at black-hole dot com
2. WHERE 1 macht keinen Sinn/ist überflüssig
3. In wiefern wird $query1 für $query2 benötigt?
Eine SQL Abfrage in einer Schleife ist eh Problematisch und JOINs wirken Wunder.
Auch REGEXP sind eigentlich ein No-Go.
Wenn ich das richtig sehe, überprüfst du ob firstletter nur aus Buchstaben&Zahlen besteht und ob firstletter 2 Zeichen lang ist.
Sollte diese Anfrage oft ausgeführt werden, könnte man beim Speichern in 'keywords' dieses gleich überprüfen.
Du erstellst ein (indiziertes) tinyint Feld.
Wenn die Länge von firstletter 2 ist und beide Buchstaben Alphanumerisch ist, dann setzt du den Wert auf 1 sonst bleibt er 0.
Beim Abfragen dann einfach nur noch:
SELECT .. FROM keywords WHERE bedingung = 1
4. Auch Sachen wie if und und lower sind sehr problematisch.
Wenn du die Kriterien einschränken kannst, ist es meistens besser beim Speichern diese zu überprüfen und dann entsprechende bool Felder zu verwenden ob die Bedingung erfüllt ist oder nicht.
So muss pro Datensatz nur 1 mal die Bedingung überprüft werden (beim Speichern) und nicht immer wieder bei jeder Abfrage.
MFG