Seite 1 von 2

MySQL for Hatkeinplan

Verfasst: 19.01.2012, 08:11
von Markus_S
Hallo mal wieder,

als MySQL-Leie schaffe ich es nach Stunden Rumprobieren nicht, folgenden Befehl zu formulieren...

1. Ich habe zwei Tabellen...

--------------------------------
tabelle-a
id | wert-1 | wert 2
--------------------------------
tabelle-b
id | wert-3 | wert-4
--------------------------------

2. Ich möchte den wert-2 zu wert-4 übertragen, wenn wert-3 gleich wert-1 ist.


Versucht habe ich folgendes:

Code: Alles auswählen

UPDATE tabelle-b SET wert-4 = (SELECT wert-2 FROM tabelle-a WHERE tabelle-b.wert-3 = tabelle-a.wert-1)
Scheint offensichtlich Quatsch zu sein... Fehlermeldung lautet:
Unknown column 'tabelle-b.wert-3' in 'where clause
Wer kann helfen? Ich zähle auf euch...

Danke

Verfasst:
von
SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Verfasst: 19.01.2012, 09:04
von e-fee
Ist auch Quatsch. Mach mal die Klammer wieder hinter dem WHERE zu! Keine Gewähr, dass nicht noch mehr falsch ist.

Verfasst: 19.01.2012, 09:17
von empty
Ne, Deine Antwort ist Quatsch.

Die Klammern sind schon richtig, bloß muss im Select natürlich auch tabelle-b mit angegeben werden, weil sie sonst im WHERE-Kontext unbekannt ist:

UPDATE tabelle-b SET wert-4 = (SELECT tabelle-a.wert-2 FROM tabelle-a,tabelle-b WHERE tabelle-b.wert-3 = tabelle-a.wert-1)

Verfasst: 19.01.2012, 14:57
von Markus_S
MySQL meldet:
You can't specify target table 'tabelle-b' for update in FROM clause

:-?

Verfasst: 19.01.2012, 15:13
von empty
Stimmt. Ich hatte mich nur auf den Fehler aus dem select-Teil der Query konzentriert und dabei übersehen, dass Du ja ein Update auf dieselbe Tabelle machst.

Das geht in MySQL auf schlichte Weise nicht...

Verfasst: 19.01.2012, 15:16
von Markus_S
Okay, hab ich mir fast schon gedacht.

Also müsste ich eine kurze PHP-Datei tippen.

Wie sähe die aus?

Verfasst: 19.01.2012, 15:17
von empty
Ein paar Lösungsansätze finden sich hier:

https://www.xaprb.com/blog/2006/06/23/h ... -in-mysql/

Verfasst: 19.01.2012, 15:34
von Markus_S
Hilft mir leider nicht. Ich kontruiere jedesmal Mist...

Bin auch gern bereit eventuelle Mühen per PayPal zu vergüten.

Verfasst: 19.01.2012, 17:10
von 800XE
Markus_S hat geschrieben:--------------------------------
tabelle-a
id | wert-1 | wert 2
--------------------------------
tabelle-b
id | wert-3 | wert-4
-----------------------------
2. Ich möchte den wert-2 zu wert-4 übertragen, wenn wert-3 gleich wert-1 ist.
Markus_S hat geschrieben:Hilft mir leider nicht. Ich kontruiere jedesmal Mist...

Bin auch gern bereit eventuelle Mühen per PayPal zu vergüten.

Code: Alles auswählen

    $query  = ' SELECT * FROM TA';
    $result = mysql_query&#40;$query&#41; or die&#40;'<hr>'.$query.'<hr>'.mysql_error&#40;&#41;&#41;;
    while&#40; $line= mysql_fetch_array&#40;$result, MYSQL_ASSOC&#41;&#41;
    &#123;
      $query  = ' UPDATE TB';
      $query .= ' SET W4 = '. $line&#91;'W2'&#93;;
      $query .= ' WHERE W3 = '. $line&#91;'W1'&#93;;
      mysql_query&#40;$query&#41; or die&#40;'<hr>'.$query.'<hr>'.mysql_error&#40;&#41;&#41;;
    &#125;

Verfasst: 19.01.2012, 17:39
von Markus_S
Okay, das scheint zu klappen... juhu :D

JEDOCH ist W2 eine Zahlenreiche mit Bindestrich (1978-07-21) und offenbar gelangt in Feld W4 dann "1950", also wurde eine Subtrahierung ausgeführt.

Sicherlich nur noch ein Syntax-Problem oder?

Verfasst: 19.01.2012, 18:48
von 800XE
Markus_S hat geschrieben:Okay, das scheint zu klappen... juhu :D

JEDOCH ist W2 eine Zahlenreiche mit Bindestrich (1978-07-21) und offenbar gelangt in Feld W4 dann "1950", also wurde eine Subtrahierung ausgeführt.

Sicherlich nur noch ein Syntax-Problem oder?
https://www.google.de/search?q=1978-07-21
wieso macht er mir keinen Taschenrechner?
ähm ... 7+21=28 .... von 78weg=50 =19050

Code: Alles auswählen

    $query .= ' SET W4 = "'.addslashes&#40;$line&#91;'W2'&#93;&#41;.'"';
      $query .= ' WHERE W3 = "'.addslashes&#40;$line&#91;'W1'&#93;&#41;.'"';

Verfasst: 19.01.2012, 18:52
von 800XE
www.google.de/search?hl=de&q=1978-7-21

die 7 ohne 0 dann gibts den Taschenrechner

Verfasst: 19.01.2012, 19:03
von Markus_S
800XE hat geschrieben:

Code: Alles auswählen

    $query .= ' SET W4 = "'.addslashes&#40;$line&#91;'W2'&#93;&#41;.'"';
      $query .= ' WHERE W3 = "'.addslashes&#40;$line&#91;'W1'&#93;&#41;.'"';
Super, klappt!

Schick mir deine PayPal-Adresse per PN. ;)

Vielen Dank!

Verfasst: 19.01.2012, 21:24
von Markus_S
Mist...

Jetzt habe ich vor lauter Freude übersehen, dass das Format nicht übereinstimmt.

w2 ist "JJJJ-MM-TT"
w4 soll "MM-TT-JJJJ"

Darum müsste ich das noch umwandeln...

Code: Alles auswählen

$query  = ' SELECT * FROM t1'; 
    $result = mysql_query&#40;$query&#41; or die&#40;'<hr>'.$query.'<hr>'.mysql_error&#40;&#41;&#41;; 
    while&#40; $line= mysql_fetch_array&#40;$result, MYSQL_ASSOC&#41;&#41; 
    &#123; 
      $query  = ' UPDATE t2'; 
      $query .= ' SET w4 = "'.addslashes&#40;$line&#91;'w2'&#93;&#41;.'"'; 
      $query .= ' WHERE w3 = "'.addslashes&#40;$line&#91;'w1'&#93;&#41;.'"'; 
      mysql_query&#40;$query&#41; or die&#40;'<hr>'.$query.'<hr>'.mysql_error&#40;&#41;&#41;; 
    &#125; 
Wie löse ich das?

Hier habe ich was gefunden aber da blicke ich nicht durch: https://www.selfphp.de/kochbuch/kochbuch.php?code=15

Verfasst: 20.01.2012, 09:06
von 800XE
Markus_S hat geschrieben:w2 ist "JJJJ-MM-TT"
w4 soll "MM-TT-JJJJ"

Code: Alles auswählen

$toks = explode&#40; '-' , $oldDate &#41;;

$newDate = $toks&#91;2&#93; . '-' . $toks&#91;1&#93; . '-' . $toks&#91;0&#93;;
//EDIT
nummerierung im ZUsammenBauer falsch .... siehe nächsten Post