Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

MySQL for Hatkeinplan

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Markus_S
PostRank 2
PostRank 2
Beiträge: 57
Registriert: 17.04.2007, 23:58

Beitrag von Markus_S » 19.01.2012, 08:11

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

Anzeige von ABAKUS

von Anzeige von ABAKUS »

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

Jetzt anfragen: 0511 / 300325-0.


e-fee
PostRank 10
PostRank 10
Beiträge: 3893
Registriert: 08.05.2007, 12:53

Beitrag von e-fee » 19.01.2012, 09:04

Ist auch Quatsch. Mach mal die Klammer wieder hinter dem WHERE zu! Keine Gewähr, dass nicht noch mehr falsch ist.

empty
PostRank 2
PostRank 2
Beiträge: 55
Registriert: 11.02.2005, 09:31

Beitrag von empty » 19.01.2012, 09:17

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)

Markus_S
PostRank 2
PostRank 2
Beiträge: 57
Registriert: 17.04.2007, 23:58

Beitrag von Markus_S » 19.01.2012, 14:57

MySQL meldet:
You can't specify target table 'tabelle-b' for update in FROM clause

:-?

empty
PostRank 2
PostRank 2
Beiträge: 55
Registriert: 11.02.2005, 09:31

Beitrag von empty » 19.01.2012, 15:13

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...

Markus_S
PostRank 2
PostRank 2
Beiträge: 57
Registriert: 17.04.2007, 23:58

Beitrag von Markus_S » 19.01.2012, 15:16

Okay, hab ich mir fast schon gedacht.

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

Wie sähe die aus?

empty
PostRank 2
PostRank 2
Beiträge: 55
Registriert: 11.02.2005, 09:31

Beitrag von empty » 19.01.2012, 15:17

Ein paar Lösungsansätze finden sich hier:

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

Markus_S
PostRank 2
PostRank 2
Beiträge: 57
Registriert: 17.04.2007, 23:58

Beitrag von Markus_S » 19.01.2012, 15:34

Hilft mir leider nicht. Ich kontruiere jedesmal Mist...

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

800XE
PostRank 10
PostRank 10
Beiträge: 5223
Registriert: 02.12.2004, 03:03

Beitrag von 800XE » 19.01.2012, 17:10

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;

Markus_S
PostRank 2
PostRank 2
Beiträge: 57
Registriert: 17.04.2007, 23:58

Beitrag von Markus_S » 19.01.2012, 17:39

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?

800XE
PostRank 10
PostRank 10
Beiträge: 5223
Registriert: 02.12.2004, 03:03

Beitrag von 800XE » 19.01.2012, 18:48

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;.'"';

800XE
PostRank 10
PostRank 10
Beiträge: 5223
Registriert: 02.12.2004, 03:03

Beitrag von 800XE » 19.01.2012, 18:52

www.google.de/search?hl=de&q=1978-7-21

die 7 ohne 0 dann gibts den Taschenrechner

Markus_S
PostRank 2
PostRank 2
Beiträge: 57
Registriert: 17.04.2007, 23:58

Beitrag von Markus_S » 19.01.2012, 19:03

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!

Markus_S
PostRank 2
PostRank 2
Beiträge: 57
Registriert: 17.04.2007, 23:58

Beitrag von Markus_S » 19.01.2012, 21:24

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

800XE
PostRank 10
PostRank 10
Beiträge: 5223
Registriert: 02.12.2004, 03:03

Beitrag von 800XE » 20.01.2012, 09:06

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
Zuletzt geändert von 800XE am 20.01.2012, 09:11, insgesamt 1-mal geändert.

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag