yo,
SELECT A., B., C., D.
FROM login AS A
JOIN udata AS B
JOIN interests AS C
JOIN settings AS D ON A.id = '1'
AND B.id = A.id
AND C.id = A.id
AND D.id = A.id
LIMIT 1
schlechtter sql code, zum einen sehe ich nicht den sinn, jede tabelle mit den alias-namen und \* auszugeben, wenn schon alle zeilen, warum dann nicht gleich mit einem einzigen \* ?
ausserdem verzichte bitte auf das AS bei alisnamen für eine tabelle, nicht jedes dbms kann damit umgehen, es ist unnötig und bläst den code nur auf.
zuletzt ist es immer ratsam, eine explizite join syntax zu benutzen, wo die join bedingungen gleich hinter dem join in der ON klausel stehen. erspart langes suchen.
SELECT \*
FROM login A
JOIN INNER udata B ON B.id = A.id
JOIN INNER interests C ON C.id = A.id
JOIN INNNER settings D ON D.id = A.id
WHERE A.id = '1'
LIMIT 1
und kurz zu deinem problem, eine tabelle ist per definition eine unsortierte menge, sprich mit den LIMIT 1 kannst du unterschiedliche datensätze bekommen, die sich dann inhaltlich unterscheiden. willst du immer den gleichen datensatz haben, dann sortiere nach einem eindeutigen kriterium, bevor du LIMIT einsetzt. eventuell löst sich damit dein problem, aber das ist eine vermutung.
Ilja