php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 08-02-2015, 20:09
asterix6
 Registrierter Benutzer
Links : Onlinestatus : asterix6 ist offline
Registriert seit: Dec 2013
Beiträge: 19
asterix6 befindet sich auf einem aufstrebenden Ast
Standard aus DB löschen

Hallo zusammen
Ich habe ein csv in eine Datenbank eingelesen.
Per on duplicate key update, werden Updates gemacht (im neuen csv wird geschaut, ob sich etwas geändert hat)
Aber wie kann ich die Daten wieder löschen, wenn sie im neu ankommenden csv fehlen?
PHP-Code:
$eintrag "INSERT INTO liste (ID, name, firstname)
VALUES ('$key[1]','$key[7]','$key[8]')
      ON DUPLICATE KEY UPDATE 
name='" 
.$key[7]. "',
firstname='" 
.$key[8]. "' ";

$eintragen mysql_query($eintrag);

Ich möchte schauen ob $key[1] (die ID) noch vorhanden ist, sonst den ganzen Datensatz löschen.
Kann mir jemand helfen?
Mit Zitat antworten
  #2 (permalink)  
Alt 09-02-2015, 09:57
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 851
fireweasel wird schon bald berühmt werdenfireweasel wird schon bald berühmt werden
fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken
Standard

Zitat:
Zitat von asterix6 Beitrag anzeigen
...
Per on duplicate key update, werden Updates gemacht (im neuen csv wird geschaut, ob sich etwas geändert hat)
Aber wie kann ich die Daten wieder löschen, wenn sie im neu ankommenden csv fehlen?...
Ich möchte schauen ob $key[1] (die ID) noch vorhanden ist, sonst den ganzen Datensatz löschen.
Kann mir jemand helfen?
Code:
DELETE FROM liste WHERE ID=?
Guckst du ...
* allgemein: Delete (SQL) - Wikipedia, the free encyclopedia
* für deinen SQL-Dialekt: MySQL :: MySQL 5.7 Reference Manual :: 13.2.2 DELETE Syntax

Geändert von fireweasel (09-02-2015 um 10:02 Uhr)
Mit Zitat antworten
  #3 (permalink)  
Alt 09-02-2015, 13:34
asterix6
 Registrierter Benutzer
Links : Onlinestatus : asterix6 ist offline
Registriert seit: Dec 2013
Beiträge: 19
asterix6 befindet sich auf einem aufstrebenden Ast
Standard

das kenne ich schon, aber wie muss ich das nun in den beschriebenen Fall reinsetzen?
Alle Datensätze der IDs, die er nicht findet, sollen gelöscht werden.
Wie kann ich das elegant in den obigen Code reinbringen? Sieht jemand eine Lösung?
Vielen Dank!
Mit Zitat antworten
  #4 (permalink)  
Alt 09-02-2015, 21:10
Quetschi
 PHP Expert
Links : Onlinestatus : Quetschi ist offline
Registriert seit: Dec 2004
Beiträge: 3.134
Quetschi wird schon bald berühmt werden
Standard

Sammle die IDs deiner CSV z.B. in einem Array und baue daraus ein Statement dass wie folgt aussieht:
Code:
DELETE FROM ... WHERE ID NOT IN(3,5,6,10,34,...)
__________________
Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
Schön - etwas Geschichte kann ja nicht schaden.
Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!
Mit Zitat antworten
  #5 (permalink)  
Alt 09-02-2015, 21:39
asterix6
 Registrierter Benutzer
Links : Onlinestatus : asterix6 ist offline
Registriert seit: Dec 2013
Beiträge: 19
asterix6 befindet sich auf einem aufstrebenden Ast
Standard

Vielen Dank! Genau sowas brauche ich.
Aber wie genau kann ich die IDs, die nicht vorhanden sind einfangen?
Kann mir jemand noch einen genaueren Tipp geben? (Sorry, bin noch Anfänger.)
Den Delete-Teil ginge dann konkret so:
PHP-Code:
 DELETE FROM ... WHERE ID NOT IN($IDfehlt
Aber wie bekomme ich diese IDs in $IDfehlt?
Vielen Dank für eure Hilfe!

Geändert von asterix6 (09-02-2015 um 21:42 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 09-02-2015, 22:05
Quetschi
 PHP Expert
Links : Onlinestatus : Quetschi ist offline
Registriert seit: Dec 2004
Beiträge: 3.134
Quetschi wird schon bald berühmt werden
Standard

Du sollst auch nicht die IDs einfangen die nicht vorhanden sind, sondern eben die, die du in deiner CSV hast. Die WHERE-Klausel selektiert dann alle Datensätze in deiner Tabelle, die eben nicht (mehr) in deiner CSV enthalten sind.

Ich nehme an, dass du deine CSV in einer schleife durchläufst.

PHP-Code:
$IDs = array();
while (
$keys fgetcsv($fp))
{
$IDs[] = $keys[1];

//dein restlicher Code mit UPDATE usw...

}

//und hier löschst du dann wie oben vorgeschlagen 
__________________
Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
Schön - etwas Geschichte kann ja nicht schaden.
Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!
Mit Zitat antworten
  #7 (permalink)  
Alt 10-02-2015, 21:32
asterix6
 Registrierter Benutzer
Links : Onlinestatus : asterix6 ist offline
Registriert seit: Dec 2013
Beiträge: 19
asterix6 befindet sich auf einem aufstrebenden Ast
Standard

Vielen Dank.
Es funktioniert noch nicht ganz.
Ich habe nun folgendes:

PHP-Code:
   $IDs=array();
  
$IDs[] = $key[1]; 
  echo 
implode(","$IDs); 
Hier bekomme ich nun alle IDs aneinandergehängt: 35747. Ich brauche es aber so: 3,5,7,47
Damit ich es dann in den DELETE-Query einsetzen kann.
Kann mir jemand helfen, wie ich das Komma zwischen die IDs bekomme?
Vielen Dank!
Mit Zitat antworten
  #8 (permalink)  
Alt 10-02-2015, 21:42
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

PHP-Code:
$ids = array(12345);

echo 
implode(','$ids);
// 1,2,3,4,5 
Mit Zitat antworten
  #9 (permalink)  
Alt 11-02-2015, 13:07
asterix6
 Registrierter Benutzer
Links : Onlinestatus : asterix6 ist offline
Registriert seit: Dec 2013
Beiträge: 19
asterix6 befindet sich auf einem aufstrebenden Ast
Standard

Ja so funktioniert es, wie du das beschrieben hast.
Bei mir gibts aber Probleme und ich komme einfach nicht drauf, wie ich das lösen muss:

PHP-Code:
  foreach ($rows as $key) {

   echo 
$key[1] .'<br>';
   
$IDs=array();
     
$IDs[] = $key[1]; 
     
      echo 
implode(','$IDs) .'<br>';

Nun erscheint
2
2
5
5
7
7

Wie kann ich das so umwandeln, dass es vom echo implode so erscheint:
2,5,7
Vielen Dank nochmals!
Mit Zitat antworten
  #10 (permalink)  
Alt 11-02-2015, 13:12
Quetschi
 PHP Expert
Links : Onlinestatus : Quetschi ist offline
Registriert seit: Dec 2004
Beiträge: 3.134
Quetschi wird schon bald berühmt werden
Standard

Du setzt bei jedem Schleifendurchlauf das Array zurück, wodurch es jedesmal nur ein einziges Element enthält. Dadurch gibt implode() natürlich auch immer nur den einen aktuellen Wert aus.
__________________
Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
Schön - etwas Geschichte kann ja nicht schaden.
Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!
Mit Zitat antworten
  #11 (permalink)  
Alt 11-02-2015, 13:14
asterix6
 Registrierter Benutzer
Links : Onlinestatus : asterix6 ist offline
Registriert seit: Dec 2013
Beiträge: 19
asterix6 befindet sich auf einem aufstrebenden Ast
Standard

hm, ja. Aber wie kann ich das ändern?
Ich habe den key[1] ja erst nach dem foreach...
Was wäre der heisse Tipp dazu?
Mit Zitat antworten
  #12 (permalink)  
Alt 11-02-2015, 13:16
Quetschi
 PHP Expert
Links : Onlinestatus : Quetschi ist offline
Registriert seit: Dec 2004
Beiträge: 3.134
Quetschi wird schon bald berühmt werden
Standard

$ids = array() vor dem Beginn der Schleifen platzieren vielleicht?
__________________
Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
Schön - etwas Geschichte kann ja nicht schaden.
Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!
Mit Zitat antworten
  #13 (permalink)  
Alt 11-02-2015, 13:20
asterix6
 Registrierter Benutzer
Links : Onlinestatus : asterix6 ist offline
Registriert seit: Dec 2013
Beiträge: 19
asterix6 befindet sich auf einem aufstrebenden Ast
Standard

aha! Und den implode nach der Schleife!
Herzlichen Dank für die superschnelle Hilfe!
Mit Zitat antworten
  #14 (permalink)  
Alt 11-02-2015, 13:21
Quetschi
 PHP Expert
Links : Onlinestatus : Quetschi ist offline
Registriert seit: Dec 2004
Beiträge: 3.134
Quetschi wird schon bald berühmt werden
Standard

__________________
Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
Schön - etwas Geschichte kann ja nicht schaden.
Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!
Mit Zitat antworten
  #15 (permalink)  
Alt 11-02-2015, 13:30
asterix6
 Registrierter Benutzer
Links : Onlinestatus : asterix6 ist offline
Registriert seit: Dec 2013
Beiträge: 19
asterix6 befindet sich auf einem aufstrebenden Ast
Standard

hm, aber ich habe doch nochmals ein Problem.
Ich habe ja nun die Daten so wie ich sie will:
PHP-Code:
echo implode(','$IDs); 
das ergibt 2,5,7
Wenn ich im Delete-Befehl das so eingebe funktioniert es:

PHP-Code:
DELETE FROM list WHERE ID NOT IN(2,5,7)"; 
Aber wie bringe ich nun diesen implode-Ausgabe dort hinein?
Habe es so versucht:
PHP-Code:
DELETE FROM list WHERE ID NOT IN($IDs)"; 
funktioniert leider nicht.
Dann versuchte ich das, um dann $ID anstelle von $IDs einzusetzen.
PHP-Code:
 $IDimplode(','$IDs); 
Dann sagt er aber: Array to string conversion

Und jetzt??
Sorry, bin halt wirklch Anfängerin. Vielen Dank für deine geduldige Hilfe!

Geändert von asterix6 (11-02-2015 um 13:33 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Datei aus Verzeichnis löschen Fanello PHP Developer Forum 6 31-08-2007 22:22
Teilstring aus Array löschen! schickimicky PHP Developer Forum 2 13-12-2006 10:17
aus DB löschen stefens PHP Developer Forum 1 25-11-2006 14:29
E-Mail Adressen aus txt Datei lesen und anschl. aus DB löschen Serra PHP Developer Forum 5 22-06-2006 14:20
Zeile aus Textdatei löschen StephanF PHP Developer Forum 7 09-03-2003 17:18

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 02:01 Uhr.