2016-08-16 4 views
0

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:

enter image description here

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=7fieldvalue=0555

Ergebnisse von zwei Abfragen hat (-Mine und die auf auf Antworten):

enter image description here

Antwort

1

Sie können es einfach machen, indem Sie so etwas verwenden,

SELECT 
swtickets.ticketid, 
swtickets.ticketstatustitle, 
swtickets.departmenttitle, 
swtickets.subject, 
swtickets.dateline, 
swtickets.ownerstaffname, 
swtickets.lastreplier, 
swcustomfieldvalues.fieldvalue, 
swcustomfieldvalues.customfieldid 
FROM swtickets 
LEFT JOIN swcustomfieldvalues 
ON 
swcustomfieldvalues.typeid = swtickets.ticketid 
AND 
swcustomfieldvalues.fieldvalue = 12345678 
AND 
swcustomfieldvalues.customfieldid = 123 
+0

ich Störung erhalte: 'Nicht eindeutige Tabelle/Alias:‚swcustomfieldvalues‘' – malhobayyeb

+0

Ok ich habe meine bearbeitet Antwort können Sie es überprüfen jetzt –

+0

Fast richtig, außer es gibt für ich unerwünschte 'swcustomfieldvalues.fieldvalue' für' swcustomfieldvalues.customfieldid' nicht gleich '123' – malhobayyeb

0

Versuchen Sie, diese

select swtickets.ticketid, swtickets.ticketstatustitle, swtickets.departmenttitle, swtickets.subject, swtickets.dateline, swtickets.ownerstaffname, swtickets.lastreplier, swcustomfieldvalues.fieldvalue, swcustomfieldvalues.customfieldid 
     from swtickets 
     join swcustomfieldvalues ON (swtickets.ticketid = swcustomfieldvalues.typeid) 
     where swcustomfieldvalues.fieldvalue = 12345678 and swcustomfieldvalues.customfieldid=123 
+0

dasselbe Ergebnis wie andere Antworten. – malhobayyeb

+0

Alle Antworten holen die richtige Anzahl von Zeilen, aber die Daten von 'swcustomfieldvalues' sind nicht was ich will. – malhobayyeb

+0

Ich möchte von der Tabelle den Wert der Spalte 'fieldvalue', wo' customfieldid' ist 6. Aber bei der Abfrage möchte ich 'fieldvalue' anpassen, wenn' customfieldid' 7 ist – malhobayyeb

Verwandte Themen