[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
ein Redaxo mit zwei Datenbanken? - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
halsted
Beiträge: 23
Registriert: 15. Jan 2007, 12:00
Kontaktdaten: ICQ

ein Redaxo mit zwei Datenbanken?

9. Okt 2007, 10:47

Hallo -

in der master.inc.php kann ich eine zweite, optionale Datenbank angeben.

Weiss jemand, was das bringt?
Und wie kann ich es nutzen?

Ich wollte, um Scriptlaufzeiten outzusourcen, zwei Datenbanken nutzen, z.B. eine in einer eigenen Kategorie (für ein Forum), der Rest der Seite hat die andere Datenbank.
Kann ich Inhalte der Datenbanken mischen? das heisst, in einem Modul Inhalte aus beiden Datenbanken anzeigen?

Danke für Antworten

Grüsse

Halsted

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

9. Okt 2007, 13:16

Hi,

wenn du eine 2. DB in der master.inc angibst, kannst du diese dann mit

Code: Alles auswählen

$sql = new sql(2);
verwenden..

Mann kann weiterhin bis zum Index 9 weitere DB Verbindungen manuell anlegen / kopieren.

Viele Grüße,
Markus

Benutzeravatar
cukabeka
Beiträge: 821
Registriert: 31. Mai 2006, 00:01
Wohnort: Aschaffenburg

29. Apr 2008, 15:34

das wird in kürze für mich hochinteressant werden, da ich von einem projekt auf die datenbank eines anderen projektes zugreifen werde.

ist es denn auch einfach möglich, aus einem modul heraus mit den redaxo-funktionen mal auf DB1 und mal auf DB2 zuzugreifen? und falls ja: wie?

ich stelle mir das so vor

Code: Alles auswählen

$sql = new sql(1);
echo article->getValue('id')

$sql = new sql(2);
echo article->getValue('id')
ist sowas möglich oder gibt es irgendwo ein beispiel, wie man mit mehreren BDs umgeht?

Benutzeravatar
cukabeka
Beiträge: 821
Registriert: 31. Mai 2006, 00:01
Wohnort: Aschaffenburg

6. Sep 2008, 11:59

ich frage nochmal nach.. wie kann man denn die beiden DBs nutzen?

und wofür habt Ihr sie denn bisher genutzt oder für welche anwendungen ist diese option vorgesehen?

mein plan ist, von einer redaxo-installation auf die daten einer anderen zuzugreifen. kann da jemand weiterhelfen?

AloneInTheCode
Beiträge: 18
Registriert: 10. Mai 2008, 06:50
Wohnort: Osnabrück

27. Mär 2009, 13:47

Hi,

also ich benötige momentan genau das gleiche.

Ich habe zwei Datenbanken - eine Datenbank pro Redaxo - auf einem Account.

Beide Seiten sollen innerhalb einer Unterseite identisch sein.

Daher dachte ich, ich nutze die oben angegebene Möglichkeit, eine zweite Datenbank zu verwenden einfach innerhalb des entsprechenden Moduls.

Es würde mir helfen, wenn ich allein diesen Abschnitt innerhalb des Moduls anpassen könnte:

Code: Alles auswählen

$cat = OOCategory::getCategoryById($this->getValue("category_id"));

# Headline auslesen
$headline = $cat->getName();
$article = $cat->getArticles();
Über $cat werden im Grunde alle Inhalte geholt.
Der Code stammt nun von der ersten Version der Seite.

Es müßte nun -auf der Zweitinstallation- auf die andere Datenbank anzuwenden sein.

Wie verwende ich hier

Code: Alles auswählen

$sql = new sql(2);
?

Sind die Redaxo-Klassen überhaupt in Verbindung mit dem Aufruf einer anderen Datenbank zu verwenden und wenn dann wie?

Gibt es sowas wie:

Code: Alles auswählen

$test = new OOCategory;
$test->sql=$sql; 
Also, dass ich der Klasse zuvor erstmal mitteile, dass sie eine andere Datenbankverbindung nehmen soll?

Der Grund für diese Anpassung ist halt, dass die Inhalte auf dieser speziellen Unterseite halt nicht immer doppelt gepflegt werden müssen, da sie ja eh genau identisch sein sollen. ;)

Besten Dank für eure Hilfe im Voraus!

AloneInTheCode
Beiträge: 18
Registriert: 10. Mai 2008, 06:50
Wohnort: Osnabrück

31. Mär 2009, 09:30

Nun ja, anscheinend geht dies nicht, wenn ich die rege Beteiligung richtig interpretiere. ;)

Dann muß ich halt alles hart in das Modul coden. Ist sowieso meine Stärke und ich bin nicht von den systemeigenen Funktionen und Klassen abhängig.

Oki, thanx nochmal.

Benutzeravatar
Jan.Kristinus
Admin
Beiträge: 2166
Registriert: 24. Aug 2004, 22:11
Wohnort: Frankfurt
Kontaktdaten: ICQ Website

31. Mär 2009, 09:52

hi,

ja, leider ist das Framework von REDAXO nicht darauf ausgelegt mit verschiedenen Datenbank REDAXO Seite abzuarbeiten.

Man kann dennoch für allgemeine Datenbankabfragen eine 2. Datenbank verwenden, wie vom Markus beschrieben. Die Zugangsdaten zur 2. Datenbank gibt man in der master.inc.php ein, der SQL Aufruf über REDAXO ist $sql = new sql(2);

lg

jn
Yakamara Media GmbH & Co. KG | Kaiserstrasse 69 | 60329 Frankfurt
Tel.: 069-900.20.60.30
http://www.yakamara.de/

AloneInTheCode
Beiträge: 18
Registriert: 10. Mai 2008, 06:50
Wohnort: Osnabrück

31. Mär 2009, 10:23

Hallo Jan,

besten Dank für das Feedback.

Ist ja auch im Grunde Quatsch, denn eigentlich versucht man in der Praxis ja, so wenig Datenbanken wie möglich zu verwenden.

Dies ist auch wohl eine Spezialanwendung, bei der halt auf zwei versch. Systemen einige Unterseiten inhaltlich identisch sind.

Kommt ansonsten wohl nicht so häufig vor. ;)

Da ich Purist bin und immer gerne weiß, was ein Code macht, werde ich die sql-Klasse nicht verwenden. Ich weiß halt nicht, was ich zurück bekomme, wenn ich die Klasse nicht gut genug kenne. Da bleibe ich bei normalen mysql_queries und code das dann alles selbst.

Die master.inc. bzw. die Variablen werde ich vielleicht für die Zugangsdaten verwenden.

Falls ich noch Fragen habe, melde ich mich nochmal hier.

Besten Dank nochmal.

Benutzeravatar
cukabeka
Beiträge: 821
Registriert: 31. Mai 2006, 00:01
Wohnort: Aschaffenburg

20. Apr 2009, 01:24

Jan.Kristinus hat geschrieben: ja, leider ist das Framework von REDAXO nicht darauf ausgelegt mit verschiedenen Datenbank REDAXO Seite abzuarbeiten.
hm, deute ich diese aussage dann dahingehend richtig, dass meine wunschfunktion von weiter oben, also etwa

Code: Alles auswählen

$sql = new sql(1); 
echo article->getValue('id') 

$sql = new sql(2); 
echo article->getValue('id')
NICHT funktionieren wird? ich habe nämlich mit hilfe der metainfos eine umfangreiche datenbank laufen, auf die ich von einem zweiten redaxo aus gerne zugreifen würde.

grüße

AloneInTheCode
Beiträge: 18
Registriert: 10. Mai 2008, 06:50
Wohnort: Osnabrück

20. Apr 2009, 10:05

Hi cukabeka,

Deine Frage ging zwar an Jan, aber schreibe trotzdem was dazu. ;)
Habe das nicht mehr probiert, aber mir kurz die sql-Klasse angeschaut.
Soweit wie ich das verstanden habe, dient die sql-Klasse lediglich dazu, einen MySQL-String abzusetzen, wobei man dies dann über die zweite Datenbankverbindung (definiert in der master.inc.php) tun kann.
Mehr kann man damit nicht machen, wenn ich das richtig verstanden habe.

Ein Konstrukt, welches ich noch ausprobiert hatte war:

Code: Alles auswählen

$sql = new sql(2); 
$test = $sql->getArticle(28);
oder so ähnlich. Aus o.g. Gründen ging das aber nicht.

Benutzeravatar
cukabeka
Beiträge: 821
Registriert: 31. Mai 2006, 00:01
Wohnort: Aschaffenburg

20. Apr 2009, 19:43

moin AITC!

danke für deine antwort. natürlich ist das ergebnis eher unerfreulich. nicht tragisch, aber schön wäre es durchaus, da sich damit interessante sachen realisieren lassen würden.

falls jemandem etwas einfällt, wie man redaxo so zurechtbiegen kann, dass das doch funktioniert, immer her damit!

grüße

benS
Beiträge: 8
Registriert: 25. Jun 2009, 09:14
Kontaktdaten: Website

8. Jul 2009, 11:46

Naja, grundsätzlich kann man mit der SQL-Klasse schon einiges machen. Hier mal ein Beispiel alle Gästebuch-Einträge aus einer Datenbank, die man als 2. Datenbank in der master.inc.php angegeben hat, in einem Modul auszugeben (einfach ein Modul erstellen und den folgenden Code als Ausgabe definieren):

Code: Alles auswählen

$sql = new sql(2);
$sql->setQuery("SELECT * FROM guestbook WHERE active = 1 ORDER BY id DESC");
/*
Sehr simple SQL-Abfrage
Hier steht guestbook fuer den Tabellennamen der Gaestebuch-Tabelle und ausgegeben werden alle Beitraege, bei denen die Spalte 'active' den Wert 1 enthaelt und die Beitraege werden nach der Spalte 'id' ausgegeben (groesste ID zuerst, also zuerst der neueste Beitrag) 
*/

// Hier kommt die eigentliche Ausgabe
for($i = 0; $i < $sql->getRows(); $i ++){
  echo "<p>" . $sql->getValue('author') . " am " . $sql->getValue('create_date') . $sql->getValue('create_time') . "</p>";
  echo "<p>" . $sql->getValue('text') . "</p>";
  $sql->next();
}
/*
Einfach fuer die Funktion $sql->getValue() als Parameter den Spaltennamen angeben. 
*/
Grundsätzlich sind natürlich noch interessantere und anspruchsvollere Beispiele denkbar.
Man könnte auch ein Modul schreiben, bei denen man eine Eingabe machen kann, die dann die Datenbankabfrage beeinflusst (z.B. zeige mir alle Veröffentlichungen, deren Autor "Hans" heißt oder so). Dann müsste man eben im Modul (Eingabe-Teil) ein Input-Feld erstellen, in welches man den Namen eingeben kann, diesen Wert dann im Ausgabe-Teil auffangen und in die Abfrage einbringen ("SELECT * FROM xyz WHERE name LIKE eingabe").

Grundsätzlich ist auch möglich, einen/mehrere Artikel einer zweiten REDAXO-Installation auszugeben, allerdings ist es relativ arbeitsintensiv denke ich, soweit ich das beurteilen kann (hab vom Framework auch keine Ahnung). Man müsste sich die Abfragen eben selbst zusammenbasteln...

Benutzeravatar
Peter.Bickel
Beiträge: 1856
Registriert: 25. Jan 2005, 21:17
Wohnort: Schleswig-Holstein
Kontaktdaten: Website

6. Jul 2010, 21:09

Hi,

ja, wie benS das skizziert hat, so ist meines Wissens der einzige Weg, auf die zweite DB zuzugreifen. Das ist aber auch schon eine ganze Menge, finde ich.
Bei zusätzlich programmierten Inhalten ist es ja eh kein Problem. Wenn man aber an den mit Modulen gepflegten Inhalt heran will, wäre sowas hier das Schema eines typischen Konstrukts:

Code: Alles auswählen

$sql = new rex_sql(2);
$sql_query = '
	SELECT
		*
	FROM
		rex_article, rex_article_slice
	WHERE
		x = y
	GROUP BY
		z
	ORDER BY
		id';

$sql->setQuery($sql_query);

for ($i=0; $i<$sql->getRows(); $i++) {

	echo '
	<li>'.$sql->getValue('name').'</li>';
	
	$sql->next();
}
Man kann also ohne Weiteres die Artikelliste einer Kategorie o.ä. ausgeben.
Was man lieber nicht versuchen sollte, ist, auf diese Weise die Slices eines bestimmten Artikels auszulesen. Es ist - soweit ich das verstehe - ziemlich unmöglich, die Slice-Reihenfolge nur einem SQL-Select herauszubekommen.
Denkbar wäre es aber z.B. mittels SQL den gewünschten Artikel zu ermitteln und dann vielleicht an die gecachte Datei dieses Artikels heranzuzkommen.

Man muss da nur mal phantasievoll ein, dann fallen einem sicher eine Menge Möglichkeiten ein.

Schöne Grüße,
Peter.

Zurück zu „Allgemeines [R3]“