tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Yaslaw
ERLEDIGT
JA
ANTWORTEN
14
ZUGRIFFE
1358
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    JesusFreak777 JesusFreak777 ist offline Mitglied Brokat
    Registriert seit
    Nov 2007
    Beiträge
    255
    Hallo,

    ich möchte gerne zeilen in einer Tablle anlegen,... meine tabelle ist so aufgebaut

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
     
    id   | ident   | time      | ...
    ---------------------------------
    1    | A4T     | 237643    | ...
    2    | E4s     | 237643    | ...
    3    | 5D1     | 237643    | ...
    6    | V1u     | 237643    | ...
     
     
    //237643 steht für einen timestamp

    die id ist auto_increment

    jetzt möchte ich gerne neue ident´s hinzufügen,...

    INSERT INTO ´meine tabelle´ SET ident=A7S, time=time(),...

    jetzt möchte ich aber ein prüfung machen ob die ident schon existiert wenn ja einfach ignorieren,...

    ich versuchte bereits

    PHP-Code:
    INSERT IF NOT EXIST INTO ´meine tabelle' SET ident=E4s, time=time(),... 
    und

    PHP-Code:
    INSERT IGNORE INTO ´meine tabelle' SET ident=E4s, time=time(),... 
    aber ich Vermute mal das diese immer die ID vergleichen und da diese automatisch hochzählt kommt es nie zum ignorieren,... was tun?
     

  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
    Was heisst einfach ignorieren? Der ganze INSERT wegschmeissen?

    Die normalen gehen eigentlich immer auf den PrimaryKey

    So auf die Schnelle und ungetestet, wenn du nicht auf den PrimaryKey testest
    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    INSERT INTO myTable
    SELECT 
        newRow.3*
    FROM
        (SELECT 1 AS id, 'A4T' AS ident, 237643 AS TIME) AS newRow
        RIGHT JOIN myTable
            ON newRow.ident = myTable.ident
    WHERE
        myTable.id IS NULL

    Achja, ich verschiebs mal zu den Datenbanken
     
    ---------------------------------------------------------------------------------------------------
    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
    JesusFreak777 JesusFreak777 ist offline Mitglied Brokat
    Registriert seit
    Nov 2007
    Beiträge
    255
    ja,...
    ich mache folgendes,... ich lege eine-> ident (nummer) an und dann gehe ich auf bearbeiten,...
    im bearbeiten kann ich dann die restlichen Felder ausfüllen,...
    wenn jetzt aber schon diese eine ident (nummer) existiert, soll das anlegen übersprungen werden.
     

  4. #4
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Siehe mein Nachtrag von weiter oben....
     
    ---------------------------------------------------------------------------------------------------
    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

  5. #5
    JesusFreak777 JesusFreak777 ist offline Mitglied Brokat
    Registriert seit
    Nov 2007
    Beiträge
    255
    Hallo,

    danke erstmal...

    die eine hälfte funktioniert ja schon mal.

    wenn ich was anlege was schon existiert,...

    wenn ich aber was neues anlegen will legt er nichts an :/

    hier mal mein Orginalcode,...
    PHP-Code:
    $AUtoSQL "
        INSERT INTO "
    .$autablename.
    SELECT 
        newRow.3*
    FROM
        (SELECT '
    $au' AS au, '".time()."' AS time, '".time()."' AS modtime) AS newRow
        RIGHT JOIN myTable
            ON newRow.au = "
    .$autablename.".au
    WHERE
        "
    .$autablename.".id IS NULL
        "

    das mit der ID hab ich nicht ganz verstanden,... in diesen teil des Programmes verwende ich keine ID´s,... lasse diese nur automatisch anlegen,... woher stammt die 1?

    --> au entspricht in diesen Fall jetzt ident (musste nicht programmtechnisch ein paar Änderungen vornehmen,...
    --> die Spalte ID existiert zwar in der Tabelle, ist aber in diesen Fall ever unbekannt,...
     

  6. #6
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    item: du solltest myTable durch $autablename ersetzen
    item: newRow.3* ist ein Schreibfehler meinerseits und heisst natürlich newRow.* , also ohne die 3
     
    ---------------------------------------------------------------------------------------------------
    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

  7. #7
    JesusFreak777 JesusFreak777 ist offline Mitglied Brokat
    Registriert seit
    Nov 2007
    Beiträge
    255
    mag mich immer noch nicht,...

    etwas mehr quählcode
    PHP-Code:
    $AUtoSQL "
        INSERT INTO "
    .$autablename.
    SELECT 
        newRow.*
    FROM
        (SELECT '
    $au' AS au, '".time()."' AS time, '".time()."' AS modtime) AS newRow
        RIGHT JOIN "
    .$autablename."
            ON newRow.au = "
    .$autablename.".au
    WHERE
        "
    .$autablename.".ID IS NULL
        "
    ;

    $do_AUtoSQL mysql_query($AUtoSQL); 
    das ich:
    Code :
    1
    
    SELECT 1 AS id,
    rausgelöscht habe stört nicht?
     

  8. #8
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Wenn die Felder des SELECT nicht ganeu mit den Feldern der Tabelle übereinstimmen, dann musst du die Felder im INSERT angeben

    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    INSERT INTO {$autablename} (au, TIME, modtime)
    SELECT
        newRow.*
    FROM
        (SELECT '{$au}' AS au, '".time()."' AS TIME, '".time()."' AS modtime) AS newRow
        RIGHT JOIN {$autablename} AS tab
            ON newRow.au = tab.au
    WHERE
        tab.id IS NULL

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

  9. #9
    JesusFreak777 JesusFreak777 ist offline Mitglied Brokat
    Registriert seit
    Nov 2007
    Beiträge
    255
    Hallo,

    PHP-Code:
    $AUtoSQL "
        INSERT INTO "
    .$autablename." SET 
        au='
    $au', 
        import='1', 
        time='"
    .time()."', 
        modtime='"
    .time()."'
        "
    ;

    $AUtoSQL "
    INSERT INTO 
    {$autablename} (au, time, modtime)
    SELECT
        newRow.*
    FROM
        (SELECT '
    {$au}' AS au, '".time()."' AS time, '".time()."' AS modtime) AS newRow
        RIGHT JOIN 
    {$autablename} AS tab
            ON newRow.au = tab.au
    WHERE
        tab.ID IS NULL
        "
    ;


    if(
    $do_AUtoSQL mysql_query($AUtoSQL))
      {
      echo 
    "OK";
      }
    else
      {
      die(
    mysql_error()); 
      } 
    also mit der Fehlersuche bin ich nicht weitergekommen,... weil er (so tut er zumindest) alles richtig macht,...

    der obere teil trägt stur ein der untere teil macht nix wenn´s schon eingetragen ist (wie er soll) und wenn noch nichts eingetragen ist trägt er auch nichts ein,...

    meine ausgabe ist momentan ein funktionsfähiges phpmyadmin,...

    hier meine tabelle (evtl. ist da ein fehler):
    PHP-Code:
    CREATE TABLE IF NOT EXISTS `orderlist` (
      `
    IDint(11NOT NULL AUTO_INCREMENT,
      `
    importvarchar(250) DEFAULT NULL,
      `
    auvarchar(250) DEFAULT NULL,
      `
    kundevarchar(250) DEFAULT NULL,
      `
    referenzvarchar(250) DEFAULT NULL,
      `
    catvarchar(250) DEFAULT NULL,
      `
    terminvarchar(250) DEFAULT NULL,
      `
    erledigtvarchar(250) DEFAULT NULL,
      `
    infovarchar(250) DEFAULT NULL,
      `
    timevarchar(250) DEFAULT NULL,
      `
    modtimevarchar(250) DEFAULT NULL,
      
    PRIMARY KEY (`ID`)
    ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=64 
     

  10. #10
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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.
     
    ---------------------------------------------------------------------------------------------------
    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

  11. #11
    JesusFreak777 JesusFreak777 ist offline Mitglied Brokat
    Registriert seit
    Nov 2007
    Beiträge
    255
    sorry, irgendwie peil ich das gerade alles nicht,...

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    INSERT INTO orderlist (au, time, modtime)
    SELECT
        newRow.*
    FROM
        (SELECT 'GTF' AS au, '1297786126' AS time, '1297786126' AS modtime) AS newRow
        RIGHT JOIN orderlist AS tab
            ON newRow.au = tab.au
    WHERE
        tab.ID IS NULL

    das ist meine Ausgabe bei:
    PHP-Code:
    echo "{$AUtoSQL}<br /><br />\n"
    und das:
    PHP-Code:
    echo mysql_affected_rows(); 
    gibt mir nur 0 aus,...

    genauso phpmyadmin:
    Code :
    1
    
    0 Zeile(n) eingefügt. ( die Abfrage dauerte 0.0004 sek. )

    Danke für die Hilfe

    -> mehr konnte ich den todo leider nicht entnehmen,... habe ich etwas übersehen? das errorreporting hatte ich so schon drinnen,...
    Geändert von JesusFreak777 (15.02.11 um 17:17 Uhr)
     

  12. #12
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Jepp. In meinem, bereits 2 mal verlinkten, Tutorial steht dass du es mit phpMyAdmin oder etwas dergleichen testen sollst.

    Und welches ist dien ident aus deinem ersten Post?
     
    ---------------------------------------------------------------------------------------------------
    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

  13. #13
    JesusFreak777 JesusFreak777 ist offline Mitglied Brokat
    Registriert seit
    Nov 2007
    Beiträge
    255
    ja mit phpmyadmin habe ich getestet,...

    au ist mein ident,... wie ich bereit im dritten post erwähnte:
    --> au entspricht in diesen Fall jetzt ident (musste noch programmtechnisch ein paar Änderungen vornehmen,...
    und die ID ist der Schlüsselwert der automatisch inkrementiert wird,...

    PHPmyAdmin macht das selbe wie mein Script,... fügt nichts ein, obwohl der wert in der spalte au noch nicht existiert.
     

  14. #14
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Oh, kleiner Fehler. LEFT anstelle von RIGHT
    Ich rate dir, die JOIN-Geschichte zu studieren und zu verstehen. Ansonsten bist du immer auf Fremdhilfe angewiesen.
    JesusFreak777 bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    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

  15. #15
    raiguen raiguen ist offline Mitglied Silber
    Registriert seit
    Feb 2008
    Ort
    Salzhemmendorf(Nds)
    Beiträge
    51
    Probier mal das hier:
    Code :
    1
    2
    3
    4
    5
    6
    
    INSERT INTO orderlist (au, time, modtime)
    SELECT
        newRow.*
    FROM
        (SELECT 'GTF' AS au, '1297786126' AS time, '1297786126' AS modtime) AS newRow
        WHERE newRow.au NOT IN (SELECT au FROM orderlist)

    2.Variante:

    Code :
    1
    2
    3
    4
    5
    6
    
    INSERT INTO orderlist (au, time, modtime)
    SELECT
        newRow.*
    FROM
        (SELECT 'GTF' AS au, '1297786126' AS time, '1297786126' AS modtime) AS newRow
        WHERE NOT EXISTS(SELECT au FROM orderlist WHERE au=newRow.au)
     
    Es ist erstaunlich, was man alles findet, wenn man etwas sucht...

Ähnliche Themen

  1. Function does not exist
    Von Asix im Forum PHP
    Antworten: 12
    Letzter Beitrag: 16.04.10, 19:41
  2. insert into if not exist
    Von Steusi im Forum PHP
    Antworten: 3
    Letzter Beitrag: 24.03.09, 10:16
  3. eXist-DB und Cocoon
    Von aytmolay im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 25.04.06, 17:06
  4. if exist abfrage mit php
    Von derdemo im Forum PHP
    Antworten: 2
    Letzter Beitrag: 06.07.05, 17:40
  5. Where not exist
    Von Riegel im Forum PHP
    Antworten: 19
    Letzter Beitrag: 10.06.05, 14:50

Stichworte