SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Webseiten professionell erstellen

Webseiten professionell erstellen zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)
Hilfe Community Kalender Heutige Beiträge Suchen

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 12.11.2010, 09:06:18
Alpine Swift Alpine Swift ist offline
Anfänger
 
Registriert seit: Nov 2010
Alter: 46
Beiträge: 2
Arbeiten mit mehreren DBs zugleich (Sync.)

Hallo!

Ich kann nun schon etwas mit MySQL umgehen, bin aber nicht gerade der FREAK. Und die aktuelle Aufgabe überfordert mich ehrlich gesagt etwas.

Aufgabenstellung:

Ich habe zwei Datenbanken:

db_shop1
db_shop2

Beide haben eine Tabelle "tb_articles", die in der Struktur auf beiden DBs gleich ist. Die Spalten sind:

`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`price` double NOT NULL DEFAULT '0',
`impressions` int(11) NOT NULL DEFAULT '0',

Es soll nun nur der shop1 im backend gepflegt werden. Die Veränderungen dort müssen aber auch in den shop2 übertragen werden.

Erst dachte ich, das könnte man in Navicat über die Synchronisierung handhaben. Aber dann wird alles einfach übertragen und es gibt aber Einschränkungen. Es soll nicht alles absolut synchron sein:

Die Spalte `impressions` soll mit Ihrem Wert erhalten bleiben.

Ich bräuchte also eine Abfrage, die folgendes vornimmt (sorry schon mal für die wahrscheinlich dilletantische Ausdrucksweise, die jetzt kommt ;-)):

Lösche alle Einträge in shop2.tb_articles, wenn shop2.tb_articles.id nicht in shop1.tb_articles.id vorkommt.
-> Damit lösche ich in Shop2 alles, was in Shop1 über das backend gelöscht wurde.

Update alle Einträge in shop2.tb_articles, wenn shop2.tb_articles.id in shop1.tb_articles.id vorkommt, nur den Wert im Feld shop2.tb_articles.impressions nicht.
-> Damit übertrage ich die Änderungen an Artikeln, im backend von Shop1 verändert wurden an Shop2. Nur nicht die impressions (Klickzahlen), denn die kommen ja aus Shop2 und sollen erhalten bleiben.

Übertrage alle Einträge von shop1.tb_articles nach shop2.tb_articles, wenn shop1.tb_articles.id nicht in shop2.tb_articles.id vorkommt.
-> Damit übetrage ich alle Artikel an Shop2, die in Shop1 über das backend angelegt wurden.

Ich habe inzwischen gesehen, dass man wohl auch mehrere DB-Verbindungen gleichzeitig offen haben kann. Bisher sah das bei mir immer so aus:

PHP-Code:
$db_connected mysql_connect($db_host$db_user$db_pwd);
if (!
$db_connected) {
die(
'Die Verbindung zur Datenbank ist leider gescheitert! '.mysql_error());
}

$db_selected mysql_select_db($db_name$db_connected );
if (!
$db_selected) {
die(
'Die Selektion der Datenbank ist leider gescheitert! '.mysql_error());

Damit hatte ich eine Verbindung offen und habe dann eben mit mysql_query() diverse SELECTs, UPDATEs, INSERTs usw. abgearbeitet.

Kann man aber nicht auch zwei Datenbank-Verbindungen offen haben, wenn diese auf demselben Server liegen? Das is hier der Fall. Dann müsste das doch irgendwie so gehen:
PHP-Code:

PHP-Code:
$db_shop1 mysql_connect($db_host1$db_user1$db_pwd1);
if (!
$db_shop1) {
die(
'Die Verbindung zur Datenbank ist leider gescheitert! '.mysql_error());
}

$db_shop2 mysql_connect($db_host2$db_user2$db_pwd2);
if (!
$db_shop2) {
die(
'Die Verbindung zur Datenbank ist leider gescheitert! '.mysql_error());

Wobei $db_host1 und $db_host2 ja wohl denselben Inhalt hätten.

Und so wie man "Tabelle.Spalte" in einer query angeben kann, müsste man doch auch "Datenbank.Tabelle.Spalte" angeben können oder?

Geht das irgendwie so? Oder bin ich völlig auf dem Holzweg?

Komme an dem Punkt einfach nicht weiter, weil man im Internet und auch in den diversen Büchern die ich schon habe imemr Beispiele für die ARbeit mit einer Datenbank findet ...

Danke schon mal für jeden Ansatzpunkt!

AS
Mit Zitat antworten
  #2  
Alt 12.11.2010, 12:26:24
Benutzerbild von vt1816
vt1816 vt1816 ist offline
Administrator
 
Registriert seit: Jul 2004
Beiträge: 3.707
AW: Arbeiten mit mehreren DBs zugleich (Sync.)

Hallo und willkommen hier im Forum.


Sehe da zwei Wege:
1. Du eignest Dir ausreichend Kenntnisse an um eine kleines Script zu schreiben, welches Dir die entsprechende Arbeit abnimmt
2. Du investierst (da vermutliche wiederkehrend) in einen Profi, der für Dich das Script schreibt.

Kann aus Deiner Beschreibung nicht erkennen, welcher Weg der von Dir favorisierte ist.
Denn hier - wie der Name des Forums SELFPHP es schon sagt - wirst Du Hilfe (nur) zur Selbsthilfe erhalten. Gerne helfen wir Dir wenn DU nicht weiterkommst, jedoch sehe ich zurzeit keinen entsprechenden Ansatztpunkt wo wir Dir weiterhelfen könnten. Die Dinge die Du beschrieben hast müssen jetzt in ein Script gegossen werden und zum laufen gebracht werden.

Und um die Frage gleich vorweg zu nehmen, gute Tuts findest Du hier (Punkt D).
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #3  
Alt 12.11.2010, 14:32:28
Alpine Swift Alpine Swift ist offline
Anfänger
 
Registriert seit: Nov 2010
Alter: 46
Beiträge: 2
AW: Arbeiten mit mehreren DBs zugleich (Sync.)

Hallo!

Es kommt eigentlich erst mal nur der 1. Weg in Frage. Ich will und muss verstehen (lernen) was ich da mache. Denn das oben ist nur ein Beispiel, um es exemplarisch zu verstehen. Tatsächlich geht es um ein paar mehr Tabellen.

Ich dampfe das ganze mal ein auf den ersten Schritt. Wenn ich den hin bekomme, dann werde ich den Rest wohl auch schaffen. Es sollen also anhand der `id` alle Datensätze in der shop2.tb_articles gelöscht werden, die nicht in der shop1.tb_articles vorkommen.

Mein Ansatz wie folgt:

PHP-Code:
// Verbindungen herstellen

$db_shop1 mysql_connect($db_host1$db_user1$db_pwd1);
if (!
$db_shop1) {
die(
'Die Verbindung zur Datenbank ist leider gescheitert! '.mysql_error());
}

$db_shop2 mysql_connect($db_host2$db_user2$db_pwd2);
if (!
$db_shop2) {
die(
'Die Verbindung zur Datenbank ist leider gescheitert! '.mysql_error());
}

// DELETE-Abfrage mit JOIN

$result mysql_query('DELETE * FROM shop2.tb_articles 
LEFT OUTER JOIN shop1.tb_articles 
ON shop2.tb_articles.id = shop1.tb_articles.id 
WHERE shop1.tb_articles.id IS null'
); 
Ich bin nicht sicher, ob das funktioniert hätte. Kann es aber auch nicht testen, weil ich inzwischen von meinem Hoster mitgeteilt bekam, dass ein JOIN über mehrere DBs hinweg aus Sicherheitsgründen nicht gestattet ist.

Damit hat sich das Script oben eigentlich erledigt. Wäre trotzdem schön zu hören, was Ihr darüber denkt. Man lernt ja nicht aus und vielleicht brauche ich das mal wieder.

Mein zweiter Ansatz wäre nun eben, erst mit der einen DB zu verbinden, die Werte dort in ein Arraay zu schreiben, dann mit der zweiten DB zu verbinden und den entsprechenden Abgleich zu machen. Ich denke aber, dass diese Lösung über Arrays nicht so perfromant ist wie es die mit dem JOIN wäre. Liege ich da richtig?

Die Frage ist nun, ob mir jemand noch einen anderen Ansatzpunkt geben kann, ausser JOINs (haben sich ja erledigt) und Arrays.

Das wäre prima ...

Danke. AS
Mit Zitat antworten
  #4  
Alt 12.11.2010, 19:12:50
thomas_w thomas_w ist offline
Junior Member
 
Registriert seit: Aug 2010
Alter: 14
Beiträge: 395
AW: Arbeiten mit mehreren DBs zugleich (Sync.)

Soweit ich weiß, funktionieren normale JOINs sowieso nicht über mehrere Datenbanken hinweg. Das hat nichts mit der Sicherheit zu tun. Wenn mit mehreren Datenbanken (wo möglich auf verschiedenen Server) gearbeitet wird, muss/sollte ein sogenanntes 2-PHASE-COMMIT vorhanden sein, um einen sicheren Datenaustausch zu garantieren. Aber das ist ein anderes Thema.

Aber schau Dir mal die FEDERATED Storage Engine an, wäre vielleicht eine Lösung.
http://dev.mysql.com/doc/refman/5.0/...ge-engine.html

Grüße
Thomas
__________________
Die SQL-Backstube
Bietet Rezepte, Lösungen und ausführliche Beispiele rund um gesundes SQL und zufriedene Datenbanken.
Mit Zitat antworten
Antwort


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

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 aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Ausgabe auf mehreren Seiten. Nicht Link zu jeder Seite, sondern mit [...] arbeiten? DieMilchMachts PHP Grundlagen 0 14.11.2005 20:45:44


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:45:25 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt