Ich arbeite mit MySQL, um Datenbanktabellen abzufragen.Wie kann SQL-Abfrage optimiert werden, ohne Daten zu verlieren?
Ich finde schließlich, dass die folgende Abfrage zurückgibt, was ich von meiner Datenbank will. (Ich bin nicht SQL-Experte)
SELECT * FROM (SELECT swtickets.ticketid, swtickets.ticketstatustitle, swtickets.departmenttitle, swtickets.subject, swtickets.dateline, swtickets.ownerstaffname, swtickets.lastreplier, swcustomfieldvalues.fieldvalue, swcustomfieldvalues.customfieldid FROM swtickets, swcustomfieldvalues WHERE swcustomfieldvalues.typeid=swtickets.ticketid AND swtickets.ticketid IN (SELECT typeid FROM `swcustomfieldvalues` WHERE `fieldvalue`=12345678)) as tbl
where tbl.customfieldid=123
jedoch die obige Abfrage ist eine lange Zeit in phpMyAdmin zeigen Ergebnisse.
Showing rows 0 - 24 (32 total, Query took 7.1488 sec)
Kann diese Abfrage so optimiert werden, dass sie schneller als 7 Sekunden ist?
Hier ist meine SQLFiddle:
http://sqlfiddle.com/#!9/d3b5a2
Weitere Erklärung:
Tabelle: swcustomfieldvalues
customfieldvalueid
customfieldid
typeid <— This field is not unique in this table
fieldvalue
isserialized
isencrypted
dateline
uniquehash
lastupdated
Für jedes Ticket, habe ich 9 benutzerdefinierte Felder in swcustomfieldvalues
Alle 9 benutzerdefinierte Felder für jeden Ticket haben SAME typeid
(= ticketid
in swtickes
Tabelle).
Wenn customfieldid
= 6, dann hält fieldvalue
Benutzer vollständigen Namen
Wenn customfieldid
= 7, dann fieldvalue
Benutzer Handynummer hält
Wenn ich diese Tabelle abfragen für typeid=98765
I 9 Reihen bekommen alle haben SAME typeid und verschiedene Werte für fieldvalue
und customfieldid
etc ...
Ich möchte von dieser Res ult (die 9 Zeilen) der fieldvalue
Wert wo customfieldid=6
aber nur, wenn die fieldvalue=1234567
wo customfieldid=7
ich diesen Wert bereits 1234567
in meiner Anfrage, so ist mir egal, wenn es im Ergebnis oder nicht aufgeführt ist.
Weitere Erklärung:
Alle aktuellen Antworten erfolgreich diese Gruppe von Zeilen für jedes Ticket holen, die Handy-Nummer hat, wie in der Abfrage PLUS anderem Ticket entgleist von ‚swtickets‘ Tabelle.
Was wir bisher tun: Die Suche (Abfrage) wird mit der Bedingung auf die ausgeführt wird, wenn customfieldid = 7 und fieldvalue = 0555.
Alles ist in Ordnung. Aber ich möchte nicht, dass der Feldwert im Ergebnis erscheint (ich interessiere mich nicht dafür) Ich möchte, dass der Name in meinem Zeilenergebnis erscheint.
möchte ich die fieldvalue
für die Zeile, die customfieldid=6
hat nur dann, wenn:
die Reihe mit customfieldid=7
fieldvalue=0555
Ergebnisse von zwei Abfragen hat (-Mine und die auf auf Antworten):
ich Störung erhalte: 'Nicht eindeutige Tabelle/Alias:‚swcustomfieldvalues‘' – malhobayyeb
Ok ich habe meine bearbeitet Antwort können Sie es überprüfen jetzt –
Fast richtig, außer es gibt für ich unerwünschte 'swcustomfieldvalues.fieldvalue' für' swcustomfieldvalues.customfieldid' nicht gleich '123' – malhobayyeb