Mysql abgleich / update

DonDemf

Erfahrenes Mitglied
Hey Leute,
ich habe 2 Tabellen. Einmal "fifa_spieler" und "fifa_spieler_2".
fifa_spieler hat circa 4tausend datensätze und fifa_spieler_2 circa 14tausend.


Die spalten sind identisch.
verein, name, vorname, starke, position, ........

Nun haben alle spieler bei fifa_spieler_2 den verein "Computer". Bei fifa_spieler sind die 4tausend Spieler schon den richtigen Vereinen zugeordnet.

Nun möchte ich die tabellen vergleichen und alle spieler von fifa_spieler_2 den richtigen Vereinen wie bei fifa_spieler zuordnen.

dann wären 4tausend spieler von fifa_spieler_2 richtig und die restlichen 10k noch bei Computer.

Ich hoffe mein anliegen ist klar geworden.

Mein Gedankenansatz wäre eine abfrage in der art:
Code:
if(fifa_spieler_vorname & fifa_spieler_name == fifa_spieler_2_vorname & fifa_spieler_2_name) dan update....
 
Ein einfaches UPDATE mit 2 Tabellen
SQL:
UPDATE 
	fifa_spieler_2 AS fs2,
	fifa_spieler AS fs
SET
	fs2.verein = fs.verein
WHERE
	fs2.name = fs.name
	AND fs2.vorname = fs.vorname
	-- TODO: Alle weiteren identischen Felder auflisten
 
Zuletzt bearbeitet von einem Moderator:
Danke mein Held ;-) Genau so wie ich es mir gedacht habe :D

Nun noch eine Frage:
ich habe zu jedem Spieler ein Bild auf dem Webserver. Die Bilder heißen wie die ID des spielers und werden ausgegeben mit:

<img src="images/SPIELERID.gif">

Allerdings habe ich nicht für alle Spieler ein bild. Wie kann ich es überprüfen, ob es kein Bild gibt. Wenn es kein Bild gibt, dass soll es 0.gif sein?
 
Wie mache ich es den, mit ungefähren namen?
PHP:
$sql = 'UPDATE 
    fifa_spieler_2 AS fs2,
    fifa_spieler AS fs
SET
    fs2.verein = fs.verein
WHERE
    fs2.name = %fs.name%
    AND fs2.vorname = %fs.vorname%';
	$update = mysql_query($sql);

Fehler:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%fs.name% AND fs2.vorname = %fs.vorname%' at line 7
 
Da die diese Art von Fragen sehr oft kommt, habe ich mal ein Tutorial geschrieben wie man am besten auf Fehlersuche geht.
PHP MySQL Debug Queries
Geh es doch mal durch und falls du die Lösung nicht findest, poste mal das ausgegebe SQL-Statement ins Forum.

Du hast da 2 Fehler drin.
1) Es fehlen insgesammt 4 " in deinem SQL
2) Zum Teilstrings vergelichen nimmt man LIKE anstelle von =

SQL:
UPDATE 
    fifa_spieler_2 AS fs2,
    fifa_spieler AS fs
SET
    fs2.verein = fs.verein
WHERE
    fs2.name LIKE "%fs.name%"
    AND fs2.vorname LIKE "%fs.vorname%"

Aber Achtung.:
Code:
fs2   | fs1   | Treffer
-----------------------
Hans  | Hansi | x
Hans  | Hans  | x
Hansi | Hans  | -
 
Zuletzt bearbeitet von einem Moderator:
Dafür gibt es LIKE:
SQL:
UPDATE 
    fifa_spieler_2 AS fs2,
    fifa_spieler AS fs
SET
    fs2.verein = fs.verein
WHERE
    fs2.name LIKE "%fs.name%"
    AND fs2.vorname LIKE "%fs.vorname%"
 
Weil das Update jedes mal abkackt, habe ich probiert das update weiter einzuschränken.

PHP:
<?php

$sql = 'UPDATE 
    fifa_spieler_dondemf AS fs2,
    fifa_spieler AS fs
SET
    fs2.verein = fs.verein
WHERE
    fs2.name LIKE "%fs.name%"
    AND fs2.vorname LIKE "%fs.vorname%" 
	AND fs2.starke >= "80"';
	$update = mysql_query($sql);
	
	
	if($update==TRUE) {
		echo 'done'; } else {
			
			echo mysql_error();
			echo $sql;
			var_dump($update);
			
		}

?>

Doch leider kackt der Server auch hier weiterhin ab... Jemand ne idee wie ich das lösen könnte?

Wenn ich das Update in der SQL Konsole von phpmyadmin mache, läuft es durch, aber es werden keine Updates durchgeführt:

PHP:
UPDATE 
    fifa_spieler_dondemf AS fs2,
    fifa_spieler AS fs
SET
    fs2.verein = fs.verein
WHERE
    fs2.name LIKE "%fs.name%"
    AND fs2.vorname LIKE "%fs.vorname%";

Der Weg mit den % soll sehr unpraktisch sein, da:

Beispiel:
Verein 1 | Karl-Heinz Müller-Schmidt
Verein 2 | Karl Müller

"Karl-Heinz Müller-Schmidt" wird Verein2 zugeordnet.

Bei Doppelnamen scheint es nicht zu funktionieren...
bzw. es kommt zu Fehlern.

Mir wurde zu einem JOIN geraten, aber ich habe keine Ahnung, wie ich das lösen soll :S
 
Zuletzt bearbeitet:
Ein JOIN ist eine andere Schreibweise von dem was wir bereits haben. Gibt aber dieselben Resultate wieder.
Das Problem ist, es gibt keinen mechanismus den du einbauen kannst der zu 100% versch. geschriebene Namen einander zuordnen kannst. Du kannst alle Eindeutigen zuordnen. Dann kannst du 'SOUNDS LIKE' noch vorschläge machen. Aber diese muss man unbedingt von Hand überprüfen!

SOUNDS LIKE:
http://dev.mysql.com/doc/refman/5.1/de/string-functions.html Unter SOUNDEX()
 
Zurück