WHERE something LIKE '%"testvalue":higherthaneverything%'

Status
Niet open voor verdere reacties.

TheJjokerR

Gebruiker
Lid geworden
25 apr 2008
Berichten
104
Hey daar,

Ik heb wat hulp nodig met het opstellen van een query die de hoogste LIKE iets uit een database haalt.

Laat ik een aantal voorbeelden geven van wat de '_Data' column kan bevatten:
{"array":[],"money":0,"testvalue":800}
{"array":[],"money":2,"testvalue":1800}
{"array":[],"money":3,"testvalue":900}
(mischien herken je dit al, het is JSON encoded)

Wat ik wil, is de 10 rijen met de hoogste waardes van testvalue... Maar aangezien dit allemaal in een string zit, dacht ik dus 'even een LIKE statement te gebruiken'... Dit viel vies tegen aangezien ik geen idee heb hoe ik ooit de hoogste waardes eruit moet plukken.

Ik bedoel zoiets(psuedo query):
Code:
WHERE something LIKE '%"testvalue":higherthaneverything%' LIMIT 0, 10

Ook betwijfel ik of dit mogelijk is... Hoewel, mischien kan een van jullie me op weg helpen!

Thanks
:thumb:
 
Laatst bewerkt:
Met behulp van (wellicht, ik weet niet over welke SQL omgevingf je beschikt) de functie Mid kun je gegevens uit een string strippen.
Dat doe je dan via een query.
Met behulp van de functie TOP kun je de tig hoogste waarden ophalen.

Tardis
 
Bedankt voor de snelle response,

Ik gebruik MySQL, en ben nu op zoek naar die Mid functie.

Ik hoop dat ik op wat nuttigs kom,

Bedankt!

EDIT:
Mischien kan ik iets van ORDER BY REGEX gebruiken, ik post wel als ik er niet uit kom
 
Laatst bewerkt:
Ja die link had ik ook al, ik dacht mischien REGEXP te kunnen gebruiken, maar dit lijkt niet goed te werken:
Code:
SELECT * FROM `table` ORDER BY _Data REGEXP '\"testvalue\":*' DESC LIMIT 0,10;
 
Gebruik SUBSTRING INDEX om het gedeelte van de string op te halen voor de tweede komma.
Daarna gebruik je de MID en LEN functie om het stringgedeelte dat de waarde voor "testvalue" weergeeft op te halen.

Even zelf uitvogelen.

Tardis
 
Sla je nou serieus een JSON encoded string op in de database en wil je daar dan met tekst bewerkingen numerieke data uithalen? :confused:

Wat dacht je er van om die data uit elkaar te plukken en de getallen in hun eigen veld op te slaan?
 
Dit gaat niet werken met hoe het gebruikt wordt, wat er namelijk is:
_Data is een verzameling van gegevens. Arrays, nummers, strings etc. Deze worden in een spel(gescript in Lua) makkelijk in de _Data table gezet. Als ik voor iedere keer dat ik een nieuwe variable aan _Data toe zou voegen, een eigen veld moet maken dan zou ik uiteindelijk meer dan 100 velden hebben.

Nu doe ik simpelweg dit:
spelerObject:SetDataColumn("key", "value")

Anders moet ik eerst de key column maken. (dit kan ik natuurlijk automatisch laten doen, maar het werkt nu eenmaal al zo en dit werkt goed)
 
Je kunt ook gewoon een kolom maken die "Key" heet, met daarin de key, en een kolom met "Value", met daarin de value, en dan zoeken WHERE key = 'wat je zoekt' AND value > 100.

Want je zegt wel dat dit werkt, maar dat doet het niet ;) Dit trekt je hele databaseperformance onderuit als je zo een serieuze database opzet.

En waarom kunnen spelers random key objecten aanmaken? Ik weet niet wat voor spel je hebt maar over het algemeen moet je wel een bepaalde dataset kunnen maken waar alle opties in kunnen.
 
De spelers kunnen geen key objecten maken, maar ik wel, in het script. Dit laat mij snel nieuwe functies toevoegen aan het spel zonder veel in de database bezig te zijn.
Normaal gesproken werkt dit gewoon goed, omdat het spel alleen de json encode en erin zet, en er later uit haalt.

Wat ik nu probeer heb ik er later(1 half jaar later) erbij bedacht. Ik wil een leaderboard maken op basis van een waarde uit die JSON string.

Wat je zegt over die key en value waardes is niet helemaal mogelijk. Iedere speler in het spel heeft zijn eigen row en naast deze leaderboards was ik nooit van plan de _Data waarde in een WHERE of ORDER BY statement te gebruiken.

Je hebt ook gelijk over de databaseperformance, ik denk eraan simpelweg de speler zijn leaderboard informatie in apparte kolommen te zetten, naast alleen in de JSON string.

Thanks voor de hulp en het nadenken!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan