So habe ich eine Übersetzungstabelle, die verschiedene Darstellungen eines Ortsnamens enthält. Ich schließe mich dieser Tabelle auf der placeId
, wo diese Tabelle als die rechte Seite dient (die linke Seite enthält Informationen über die place
).Mehrere Datensätze in der rechten Tabelle in 1 Datensatz der linken Tabelle filtern
Der Beitritt zu placeId führt jedoch möglicherweise zu mehr Übersetzungen, siehe Tabelle unten. Der Inhalt von preferredName/shortName/historicName sind alle 0 oder 1. Es gibt jedoch keine Regel, dass jede Übersetzung mindestens 1 Datensatz mit preferredName=1
haben sollte.
Also, was ich am Ende mit ist: Wie kann ich nur 1 dieser Übersetzungen wählen, insbesondere:
- wenn Datensatz mit
preferredName=1
existiert: Verwenden Sie diese - else if Datensatz mit
shortName=1
besteht: Verwendung wenn diese - sonst weder wahr ist (so sind beide 0), dann diesen Datensatz holen
.
+---------------+---------+------------------+---------------+-----------+--------------+
| translationId | placeId | alternateName | preferredName | shortName | historicName |
+---------------+---------+------------------+---------------+-----------+--------------+
| 4832 | 554 | 'New York' | 1 | 0 | 0 |
| 4833 | 554 | 'NY' | 0 | 1 | 0 |
| 4834 | 554 | 'New York City' | 0 | 0 | 0 |
+---------------+---------+------------------+---------------+-----------+--------------+
Irgendwelche Anhaltspunkte? Es läuft im Wesentlichen darauf hinaus, mehrere Übereinstimmungen in der rechten Tabelle mit 1 Datensatz in der linken Tabelle zu filtern.
Sortieren nach "PreferredName" und " ShortName ", und dann, wählen Sie das erste Ergebnis;) –
Wie würden Sie das tun, wenn Sie 10 Orte zu diesen Übersetzungen zusammenbringen; Ich möchte 10 Datensätze in diesem Fall (mit jedem Datensatz, der die entsprechende Übersetzung als Feld hat) zurückgeben – Flame
Sie können Ihre beitreten auf einem Unterantrag 'wählen ... von ... Reihenfolge von ...' und vielleicht 'Grenze 1 ' –