
118080
17.03.2016
MySQL automisiert anpassen
Moin Leute
Sorry, das Unterforum Entwicklung pass nicht so ganz, aber anderen Datenbank Tags habe ich nicht gefunden...
Ich hab hier eine MySQL Datenbank und würde gerne etwas automatisieren. Ich bin mir nicht sicher ob sich das mit einer MySQL Query lösen lässt, aber ich denke es mal. Leider brauche ich diesen Syntax so gut wie nie und kenne darum eigentlich nur die Grundbefehle...
Die relevanten Tabellen und Beziehungen sehen so aus:
Wenn möchte ich für jeden Eintrag in contact.last_name schauen ob der Wert von contact.last_name irgendwo in call.description gefunden wird.
(Bsp.: contact.last_name ist der erste Wert "Peter" wenn nun irgendwo "Peter" in call.description steht dann folgt der zweite Teil)
Überall wo jetzt eine Übereinstimmung gefunden wird soll nun beim entsprechenden Eintrag in der call Tabelle die ID ausgelesen werden, suche diese ID in call_contact und trage dort bei contact_id den Wert Wert von ID des aktuellen EIntrags in contact ein..
Beispiel:
contact
call
Bei diesen Datensatz würde das Ergbenis so aussehen:
call_contact
Ich hoffe es ist einigermassen verständlich, da diese Problem sehr wichtig ist.
Bitte helft mir
Sorry, das Unterforum Entwicklung pass nicht so ganz, aber anderen Datenbank Tags habe ich nicht gefunden...
Ich hab hier eine MySQL Datenbank und würde gerne etwas automatisieren. Ich bin mir nicht sicher ob sich das mit einer MySQL Query lösen lässt, aber ich denke es mal. Leider brauche ich diesen Syntax so gut wie nie und kenne darum eigentlich nur die Grundbefehle...
Die relevanten Tabellen und Beziehungen sehen so aus:
Wenn möchte ich für jeden Eintrag in contact.last_name schauen ob der Wert von contact.last_name irgendwo in call.description gefunden wird.
(Bsp.: contact.last_name ist der erste Wert "Peter" wenn nun irgendwo "Peter" in call.description steht dann folgt der zweite Teil)
Überall wo jetzt eine Übereinstimmung gefunden wird soll nun beim entsprechenden Eintrag in der call Tabelle die ID ausgelesen werden, suche diese ID in call_contact und trage dort bei contact_id den Wert Wert von ID des aktuellen EIntrags in contact ein..
Beispiel:
contact
id | last_name |
---|---|
12 | Peter |
24 | Max |
call
id | description |
---|---|
23 | Peter ist nett. |
94 | Ich mag sie nicht. |
Bei diesen Datensatz würde das Ergbenis so aussehen:
call_contact
id | call_id | contact_id |
---|---|---|
39 | 23 | 12 |
Ich hoffe es ist einigermassen verständlich, da diese Problem sehr wichtig ist.
Bitte helft mir
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 299371
Url: https://administrator.de/forum/mysql-automisiert-anpassen-299371.html
Ausgedruckt am: 17.05.2025 um 09:05 Uhr
12 Kommentare
Neuester Kommentar
Ich bin mir nicht sicher ob die Reihenfolge stimmt und ob es unter MySQL läuft:
Problematisch wird es sobald es mehr als einen Peter in contacts gibt...
UPDATE call_contact
SET call_contact.contact_id = contact.id
FROM call_contact
INNER JOIN contact
ON call_contact.call_id = contact.id
INNER JOIN call
ON contact.last_name LIKE '%' + call.description + '%'
Öhm das müsste ich mir mal in aller Ruhe angucken aber das Hauptproblem ist vermutlich identisch. Du hast einen Fließtext in dem ein Name steht (oder vieleicht auch mehrere?) und ich joine alle Namen mit LIKE auf diesen Text. Sobald da zwei Namen drinne stehen oder der Name nicht eindeutig ist (im Text steht ja auch keine ID) gibt es mehrere Treffer und deine Zielspalte wird mit mehreren Werten aktualisiert.
Möglicherweise ist MySQL das egal und es aktualisiert die Spalte mehrfach. Dann hast du einen beliebigen Treffer da drinne stehen.
Möglicherweise kriegst du aber auch eine Fehlermeldung, MSSQL würde das anmeckern. Dann musst du erst prüfen und bei mehreren Treffern einen bestimmten wählen. Das geht, ist aber nicht ganz einfach und ich glaube mit MySQL nicht zu lösen (mit MSSQL habe ich das schon gemacht).
Möglicherweise ist MySQL das egal und es aktualisiert die Spalte mehrfach. Dann hast du einen beliebigen Treffer da drinne stehen.
Möglicherweise kriegst du aber auch eine Fehlermeldung, MSSQL würde das anmeckern. Dann musst du erst prüfen und bei mehreren Treffern einen bestimmten wählen. Das geht, ist aber nicht ganz einfach und ich glaube mit MySQL nicht zu lösen (mit MSSQL habe ich das schon gemacht).
Also mein erstes Statement war nicht ganz richtig:
Wenn man das jetzt mit account_id erweitert müsste das hier richtig sein:
Ich bin mir beim Sinn nicht ganz sicher, du kannst beide Statements testen, es sind ja erstmal nur Selects.
Wenn man das jetzt zu einem UPDATE macht:
könnte das eine Fehlermeldung provozieren sobald er mehr als einen Treffer hat. Das musst du unter MySQL bitte mal testen, das kann ich nicht genau sagen. Mit:
Bekommst du in jedem Fall Einträge mit mehr als einem Treffer angezeigt.
SELECT call_contact.contact_id,contact_id
FROM call_contact
INNER JOIN [call]
ON call_contact.call_id = [call].id
INNER JOIN contact
ON [call].[description] LIKE '%' + contact.last_name + '%'
SELECT call_contact.contact_id,contact_id
FROM call_contact
INNER JOIN [call]
ON call_contact.call_id = [call].id
INNER JOIN contact
ON [call].account_id = contact.account_id
AND [call].[description] LIKE '%' + contact.last_name + '%'
Wenn man das jetzt zu einem UPDATE macht:
UPDATE call_contact
SET call_contact.contact_id = contact_id
FROM call_contact
INNER JOIN [call]
ON call_contact.call_id = [call].id
INNER JOIN contact
ON [call].account_id = contact.account_id
AND [call].[description] LIKE '%' + contact.last_name + '%'
SELECT call_contact.contact_id
FROM call_contact
INNER JOIN [call]
ON call_contact.call_id = [call].id
INNER JOIN contact
ON [call].account_id = contact.account_id
AND [call].[description] LIKE '%' + contact.last_name + '%'
GROUP BY call_contact.contact_id
HAVING count(*) > 1
Ja die eckigen Klammern nutzt MSSQL, probier es mal mit ` vor und hinter Tabellen und Spaltennamen. Ich weiß nicht, ob MySQL call und so als Befehle erkennt wenn sie nicht vernünftig als Spaltennamen gekennzeichnet sind.
Eventuell kommt MySQL mit der UPDATE Syntax generell nicht klar, dann musst du einen Cursor oder andere Alternativen nutzen.
Eventuell kommt MySQL mit der UPDATE Syntax generell nicht klar, dann musst du einen Cursor oder andere Alternativen nutzen.