Te entiendo, bigwhite,
aunque creo que la estructura que has heredado no es mala.
No voy a decirte que cambies nada de lo que tienes hecho con PHP y que parece funcionarte bien, pero quiero que veas que la base de datos te permite hacer lo mismo. Esto te buscará los sinónimos de 'rendirse'
Código sql:
Ver originalSELECT palabra FROM words INNER JOIN
(SELECT w.idpalabra palabra1, w2.idpalabra palabra2 FROM word_meanings wm
INNER JOIN (words w, words w2) ON (w.idpalabra = wm.palabra_id AND w2.idpalabra = wm.meaning_id)
WHERE (w.palabra = 'rendirse' OR w2.palabra = 'rendirse'))t1
ON words.idpalabra = t1.palabra1 OR words.idpalabra = t1.palabra2
WHERE words.palabra <> 'rendirse'
Seguro que hay alguna otra consulta para hacer esto.
No sé que será más eficiente si esto o lo que ya tienes, aunque creo que lo tuyo pudiera ser mejor en este caso.