tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
633
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Steusi
    Steusi Steusi ist offline Nasenbär
    Registriert seit
    Sep 2006
    Ort
    MV
    Beiträge
    431
    Moin,
    ich habe eben folgende Abfrage durchführen wollen, da jemand einen großen Fehler in der Datenbank verursacht hat:
    Code sql:
    1
    2
    3
    4
    5
    6
    
    UPDATE `orders`
    SET `orders`.`orders_status` =1  
    WHERE `orders_id` IN 
    (SELECT `orders_id`
    FROM `orders_status_history`
    WHERE `date_added` >= '2010-11-01 10:15:00')
    Danach erhielt ich folgende Meldung :
    MySQL server has gone away
    Da der Fehler schnell behoben werden musste, nahm ich die Select-Anweisung einzeln und packte das Resultat in ein SET:
    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    
    UPDATE `orders`
    SET `orders`.`orders_status` =1  
    WHERE FIND_IN_SET(`orders_id`,'28323,
    28341,
    28444,
    ...
    28555,
    28600') != 0

    Jedoch bekam ich nur 1 Ergebnis? Kann man FIND_IN_SET auf diese Art und Weise nicht missbrauchen?

    Schließlich hat mich folgende Anweisung zum Erfolg geführt:
    Code sql:
    1
    2
    3
    4
    5
    6
    
    UPDATE `orders`
    SET `orders`.`orders_status` =1  
    WHERE `orders_id` =28323 
    OR `orders_id` =28341
    OR `orders_id` =28444
    ...

    Wäre nett, wenn mir jemand erläutern könnte warum das 1. Query nicht möglich ist und warum FIND_IN_SET den Dienst in meinen Augen verweigert hat.

    Danke
     
    Gruß Steusi

    Sollte dir ein Tipp von mir geholfen haben, freue ich mich auch über eine kleine Bewertung.
    Und wenn ein Problem gelöst ist, markiere deinen Beitrag bitte als erledigt.
    PHP-Code:
    $fehler "dummer Tippfehler";
    echo(
    "Und ist das Programm noch so klein, es passt immer noch ein ".$fehler". rein!"); 

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    item: Ich würde wenns geht keine Unterabfrage im WHERE benutzen.
    item: Bei FIND_IN_SET solltest du keine Leerzeichen und Zeilenumbrücher verwenden, da SQL diese mitprüft.

    Du kannst normalerweise ein einfaches JOIN machen
    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    
    UPDATE
        orders
        LEFT JOIN orders_status_history
            ON orders.orders_id = orders_status_history.orders_id
    SET
        orders.orders_status =1
    WHERE
        orders_status_history.date_added >= '2010-11-01 10:15:00'
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  3. #3
    Avatar von Steusi
    Steusi Steusi ist offline Nasenbär
    Registriert seit
    Sep 2006
    Ort
    MV
    Beiträge
    431
    OK, danke für die Hinweise. Merke immer wieder das ich Update-Query's einfach zu selten anwende, die Verwendung des JOIN innerhalb des UPDATES war mir nicht bekannt, aber klar warum sollte es nicht gehen.

    Bei FIND_IN_SET funktioniert es ohne Zeilenumbrüche auch
     
    Gruß Steusi

    Sollte dir ein Tipp von mir geholfen haben, freue ich mich auch über eine kleine Bewertung.
    Und wenn ein Problem gelöst ist, markiere deinen Beitrag bitte als erledigt.
    PHP-Code:
    $fehler "dummer Tippfehler";
    echo(
    "Und ist das Programm noch so klein, es passt immer noch ein ".$fehler". rein!"); 

Ähnliche Themen

  1. [MS SQL] FIND_IN_SET -> Inhalt einer Spalte als neuen Spaltennamen
    Von Steusi im Forum Relationale Datenbanksysteme
    Antworten: 6
    Letzter Beitrag: 29.09.10, 15:13
  2. Antworten: 9
    Letzter Beitrag: 06.09.10, 22:17
  3. SOAP WSDL PHP5 Verständisproblem
    Von bernhard123 im Forum PHP
    Antworten: 1
    Letzter Beitrag: 01.02.08, 19:05
  4. Remoting - Verständisproblem
    Von XChris im Forum .NET Web und Kommunikation
    Antworten: 2
    Letzter Beitrag: 10.08.06, 12:59
  5. Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
    Von strandjunge im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 19.01.05, 15:33