2017-05-11 5 views
0

Ich bin nicht der beste in SQL-Abfragen, ich die Grundlagen zu verstehen, und ich wollte diese Abfrage in einem einzelnen tun, anstatt zwei, ich habe die folgende Abfrage:Joining zwei Suchanfragen in SQL

SELECT * FROM `playerpdata` WHERE infoid LIKE '%Cash%' ORDER BY cast(value as int) DESC 

Es wird ein Ergebnis wie darauf zurückkommen:

infoid    value 
3924839048[Cash] 60000 
93849384[Cash]  43000 

ich mag dann den Wert nehmen, bevor die [Cash-] (die die Benutzer-ID ist) und dieses dann Vorform:

SELECT value FROM `playerpdata` WHERE infoid = '<ID FROM ABOVE>[CharacterName]' 

Ich wäre wirklich dankbar, wenn mir jemand damit helfen könnte, danke :)

edit; Erwartete Ausgabe:

infoid    value  value 
3924839048[Cash] 60000  Joe Bloggs 
93849384[Cash]  43000  Jane Doe 
+0

Was sind Ihre erwarteten Ergebnisse aus der Kombination der beiden Abfragen? –

+1

Ich gehe davon aus, dass das Redesign der Datenbankstruktur keine Option ist, oder? – Yunnosch

+0

Können Sie ein '.dump' eines geeigneten Spielzeug db von SQLite Kommandozeilen-Tool zur Verfügung stellen? Das würde jeden davor bewahren, viel zu tippen. – Yunnosch

Antwort

2

Einfache Funktion ersetzen sollte den Trick mit Charakternamen auf dem Join ersetzen Bargeld.

SELECT PD.*, PD2.value 
FROM `playerpdata` PD 
INNER JOIN `playerpdata` PD2 
on PD2.infoid = Replace(PD.InfoID,'[Cash]','[CharacterName]') 
WHERE PD.infoid LIKE '%[Cash]' 
ORDER BY cast(PD.value as int) DESC 

Obwohl es sinnvoller ist, Bargeld zu haben, Charactername in einem separaten Feld. als Info-Typ oder etwas ...

Hinweis nimmt diese [cash] wird in infoID nicht an anderer Stelle vorhanden ist.

oder ... Dieser Ansatz erzeugt PD und PD2 Tabellenaliasse spezifisch für Bargeld oder Charakternamen schließt sich dann auf der ID-w/o die []. Nur scheint mir sauberer ... aber der letzte Teil der infoID wird immer in [] und definieren sein übernimmt [Charaktername] oder [Cash]

SELECT PD.*, PD2.value 
FROM `playerpdata` PD 
INNER JOIN `playerpdata` PD2 
    on replace(PD2.infoid,'[CharacterName]','') = Replace(PD.InfoID,'[Cash]','') 
and PD.infoid LIKE '%[Cash]' 
and PD2.InfoID like '%[CharacterName]') 
ORDER BY cast(PD.value as int) DESC 
+0

Es ist interessant, dass wir mit Antworten unabhängig kamen und wir beide ersetzt sein LIKE ‚% Flüssige Mittel%‘ mit LIKE ‚% [Bargeld]‘! – Edward

+0

Ich mag Indizes. @ bloodless2010 benötigt, um 'pd.value' auf der Bestellung von. nur Platz ein Feld existierte ohne einen Tabellenalias ... der benötigt wird, da wir einen Self-Join machen, so dass alle Spalten ein Alais benötigen. – xQbert

+0

Versucht beide Abfragen laufen und erhielt das Ergebnis ‚mehrdeutige Spaltenname‘, hier ist ein SQL-Export, wenn es jede Hilfe ist: https://hastebin.com/lerefezuva.sql edit: @xQbert, lief die erste jetzt und es zurück einige Ergebnisse, aber ich habe das: https://gyazo.com/1f1a82dda3c2078aff50511ffd1fc6d7 – bloodless2010

1

Etwas wie folgt aus:

SELECT * FROM `playerpdata` p1 
LEFT OUTER JOIN `playerpdata` p2 ON p2.infoid = SUBSTR(1,LENGTH(p1.infoid)-6)||'[CharacterName]' 
WHERE p1.infoid LIKE '%[Cash]' 
ORDER BY cast(p1.value as int) DESC