php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 19.04.2011, 09:49  
Neuer Benutzer
 
Registriert seit: 08.04.2011
Beiträge: 25
PHP-Kenntnisse:
Anfänger
wooha befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] MySQL - Prüfen ob Datensatz bereits vorhanden wenn nicht eintragen

Hallo,

ich habe folgendes Szenario:

tbl_temp - in diese Tabelle werden stündlich aus einer anderen Datenbank (MentionDB) Datensätze importiert nachdem die Datensätze aus der vorherigen Stunde gelöscht wurden.

tbl_log - in diese Tabelle sollen Daten aus tbl_temp übernommen werden aber nur wenn in tbl_log noch kein Datensatz mit der selbern ID (apidnr) vorhanden ist.

Aufbau der Tabellen (nur für die Abfrage relevante Daten):

tbl_temp

temp_id | apidnr | ben | sku | herstnr | ean

tbl_log

log_id | apidnr | ben | sku | herstnr | ean

Die Felder temp_id und log_id sind Primärschlüssel und werden über auto_increment gesetzt, die Werte in apidnr sind uniqe da sie die Primärschlüssel in der oben angesprochenen MentionDB.

In tbl_temp sind nach dem ersten Import 6130 Datensätze vorhanden, in tbl_log 0. Jetzt soll mittels der folgenden Abfrage tbl_log zum ertsen Mal gefüllt werden, es müssten dann nach Adam Riese ja die selbe Anzahl an Datensätze in tbl_log sein, es sind aber 9144.

Die Abfrage:

PHP-Code:
// Daten aus "tbl_temp" auslesen
        
$query "SELECT
                    apidnr, ben, sku, herstnr, ean
                  FROM
                      tbl_temp;"
;
                  
        
$tempdata $preisbotDB->execute($query);
                
        foreach (
$tempdata as $dat) {    // für jedes Produkt das in "tbl_temp" steht
            // Prüfen ob apidnr in "tbl_log" vorhanden ist
            
$query "SELECT
                        log_id
                      FROM
                          tbl_log
                      WHERE
                          apidnr = " 
$dat['apidnr'] . ";";
            
            
$keyid $preisbotDB->execute($query);
            
            if (
$keyid['log_id'] == NULL) {    // Wenn keine ID vorhanden ist
                
$ben mysql_real_escape_string($dat['ben']);        // Bezeichnung escapen da Sonderzeichen enthalten sein können
                
                // Daten in "tbl_log" eintragen
                
$query "INSERT INTO
                            tbl_log (apidnr, ben, sku, ean, herstnr)
                            VALUES
                              ('" 
$dat['apidnr'] . "', 
                              '" 
$ben "', 
                              '" 
$dat['sku'] . "', 
                              '" 
$dat['ean'] . "',
                              '" 
$dat['herstnr'] . "')";
            
                
$preisbotDB->execute($query); 
Ich schätze das es an dieser zeile liegt
PHP-Code:
if ($keyid['log_id'] == NULL) {    // Wenn keine ID vorhanden ist 
verstehe aber nicht was das Problem ist.

Hoffe das ist jetzt nicht zu ausführlich geworden und das es einigermaßen verständlich ist.

Danke für die Hilfe,

wooha

Ps: War mir jetzt nicht sicher ob das in das PHP oder Datenbanken Forum soll, falls falsch bitte verschieben.
wooha ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 19.04.2011, 10:03  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.072
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

Um zu prüfen, ob bereits ein Datensatz mit einer bestimmten ID vorhanden ist, zähle einfach die Datensätze, die dir das Select-Statement zurückliefert oder selektiere gleich die Anzahl.
Code:
COUNT()
Asipak ist offline   Mit Zitat antworten
Alt 19.04.2011, 10:06  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

das ist eher in PHP angesiedelt ...

wenn du eine Abfrage machst, die kein Ergebnis liefert, dann darfst du nicht nach einem Teil des Ergebnisses fragen - dieses Teil des Ergebnisses gibts logischerweise gar nicht, wenn es kein Ergebnis gibt.

Frage daher nach, ob du überhaupt Ergebniss(e) bekommst ...

was benutzt du denn für eine Datenbank-Erweiterung ? irgendwas selbst geschriebenes, oder mysqli ?

in mysql_ würde ich fragen ...
PHP-Code:
if (mysql_num_rows()==0
- du brauchst die Entsprechung für deine DatenbankErweiterung
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste

Geändert von eagle275 (19.04.2011 um 10:57 Uhr).
eagle275 ist offline   Mit Zitat antworten
Alt 19.04.2011, 10:43  
Neuer Benutzer
 
Registriert seit: 08.04.2011
Beiträge: 25
PHP-Kenntnisse:
Anfänger
wooha befindet sich auf einem aufstrebenden Ast
Standard

Danke für eure Antworten. Ich habe es jetzt so probiert:

PHP-Code:
$query "SELECT
                        apidnr,
                      COUNT(apidnr) AS anz
                      FROM
                          tbl_log
                      WHERE
                          apidnr = " 
$dat['apidnr'] . "
                      GROUP BY
                          apidnr;"
;
            
            
$keyid $preisbotDB->execute($query);
            
    
vorhanden ist
            
if ($keyid['anz'] == 0) {    // Wenn keine ID vorhanden ist 
Jetzt werden in tbl_log 11087 Datensätze geschrieben, irgendwie stehe ich heute voll auf dem Schlauch -.-

Edit: Die Datenbank-Erweiterung ist eine selbstgeschriebene Klasse von einem Kollegen, mysql_count_rows() gibt es darin nicht...
wooha ist offline   Mit Zitat antworten
Alt 19.04.2011, 10:51  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

nun, ich geh jede Wette ein, dass dein "Kollege" auch "nur" mysqli oder PDO erweitert ....

aber warum fragst du nicht einfach, wie groß

count($keyid) ist ?

dann nimmst du wieder deine Abfrage vom Anfang ....und alles wird gut ->
deine geänderte Abfrage kann nicht wie gewünscht funktionieren, weil COUNT(apidnr) unabhängig vom where läuft , er zählt ALLE apidnrs damit (alle Datensätze) ... dann müsstest du es mit einem sub select lösen, was wieder Performance fressen kann ....
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 19.04.2011, 10:53  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.072
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
mysql_count_rows() gibt es darin nicht...
In PHP auch nicht. eagle meinte wohl mysql_num_rows().
Asipak ist offline   Mit Zitat antworten
Alt 19.04.2011, 10:57  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

sorry .. kleiner Schreibfehler - ich arbeite auch mit einer (selbstgeschriebenen) Datenbank-Klasse und behelfe mir immer mit

$db->anz (liefert mir aus der DB-Klasse die Anzahl der ermittelten Ergebnisse - und die beruht auf mysql_num_rows) ....

ich hatte aber auch geschrieben, dass mysql_num_rows nur für die mysql-Erweiterung gilt - du müsstest eine Entsprechung für deine Datenbank-Klasse suchen .. wenn du nicht fündig wirst, dann "löchere deinen Kollegen"
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 19.04.2011, 11:10  
Neuer Benutzer
 
Registriert seit: 08.04.2011
Beiträge: 25
PHP-Kenntnisse:
Anfänger
wooha befindet sich auf einem aufstrebenden Ast
Standard

Scheint echt nicht mein Tag zu sein heute, auf die einfachste Lösung kommt man nicht... mit count() hats jetzt geklappt =)

Hier nochmal der Code:

PHP-Code:
// Prüfen ob apidnr in "tbl_log" vorhanden ist
            
$query "SELECT
                        apidnr
                      FROM
                          tbl_log
                      WHERE
                          apidnr = " 
$dat['apidnr'] . ";";
            
            
$keyid $preisbotDB->execute($query);
            
            if (
count($keyid) == 0) {    // Wenn kein Datensatz vorhanden ist 
Danke nochmal!

Grüße wooha

Ps: Wegen der Klasse und Kollegen löchern, den gibts nicht mehr, deswegen hab ich jetzt den Job
wooha ist offline   Mit Zitat antworten
Alt 19.04.2011, 11:16  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

dann hat der doch aber hoffentlich ne Anständige Dokumentation seiner Klassen hinterlassen ?!!
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 19.04.2011, 13:54  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.870
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Allerspätestens wenn man sich die public methoden der Klasse ansieht und die Namen der Methoden nicht auf Zulu, Suhaeli oder Arabisch sind, könnte man ja schlüsse ziehen welche Klassenmethode, welche Aufgabe hat. Andernfalls -> use mysqli
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist gerade online   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
MySQL: Datensatz aus zwei Tabellen löschen Schraubendreher Datenbanken 4 16.04.2011 12:50
[Erledigt] MySQL Link Resource in einer statischen Variablen speichern Lenki PHP-Fortgeschrittene 8 18.03.2010 16:37
Mysql Übereinstimmung von Datensätzen innerhalb einer Tabelle prüfen MrVienna PHP Tipps 2010 13 28.01.2010 17:46
Überprüfen ob vorhanden und ob ein feld einen bestimmten wert hat setech Datenbanken 1 17.12.2009 09:40
[Erledigt] Tabelle automatisch generieren scheffie PHP Tipps 2009 18 07.06.2009 16:17
PHP Formular mit Daten füllen wenn bereits vorhanden Toasti85 PHP Tipps 2009 2 27.03.2009 11:33
Wie kann ich mit php/mysql einen Datensatz anzeigen lassen, wenn einer vorhanden ist? Minimi PHP Tipps 2008 10 03.02.2008 19:01
MySQL PrimaryKey von erstellen Datensatz? PHP Tipps 2005 2 09.05.2005 02:31
Prüfen, ob Bild bereits existiert {m-d} PHP Tipps 2005 8 05.05.2005 08:50
Überprüfen, ob MySQL query einen Datensatz liefert Jojo1 PHP Tipps 2005 14 22.04.2005 17:22
Wieder mal MySQL Arlam !!! (datensatz erstellen) PHP Tipps 2005 4 07.03.2005 21:08
Befehl zum prüfen ob Datensatz vorhanden <= Please Help M Datenbanken 4 12.01.2005 14:20
Frage - JS ausführen -> neuer Eintrag in MySQL vorhanden. HTML, Usability und Barrierefreiheit 2 27.11.2004 22:11
prüfen ob eintrag vorhanden ist Datenbanken 2 06.10.2004 15:28
Prüfen ob Nickname schon Vorhanden ist !! PHP Tipps 2004 6 24.07.2004 15:51

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysql mit select auf prüfen ob vorhanden, mysql werte zweier ids prüfen, sql prüfen ob eintrag vorhanden, mysql überprüfen ob eintrag existiert, php mysql eintrag schon vorhanden, mysql datensatz schon vorhanden, mysql überprüfen mehrere werte schon vorhanden, daten auf id überprüfen mysql php, mysql prüfen ob eintrag vorhanden, mysql abfrage ob wert bereits existiert, prüfen, ob wert in mysql gesetzt ist, mysql prüfen ob id in tabelle, mysql abfrage ob datensatz existiert, mysql prüfen ob existiert, mehrere datensätze prüfen, ob sie in php mysql vorhanden sind, mysql daten schon vorhanden, php mysql prüfen ob datensatz schon existiert, php mysql nur in tabelle eintragen wenn nicht vorhanden, prüfen ob ein datensatz bereits vorhanden ist mysql, my sql abfrage wenn nicht existiert in tabelle eintragen

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:41 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum