anpera.net
https://anpera.dyndns.org/phpbb3/

Abfrage aus 2 Tables
https://anpera.dyndns.org/phpbb3/viewtopic.php?f=34&t=2804
Seite 1 von 1

Autor:  Morpheus [ Sa 26 Aug, 2006 22:59 ]
Betreff des Beitrags:  Abfrage aus 2 Tables

Ich will, am Anfang des Moduls, daß auf 2 Table zugegriffen wird, und zwar im kompletten Modul, da ich die Werte aus beiden dort änder. Ich habe es jetzt so am Anfang stehen:
$this->bbcode_second_pass_code('', '
require_once "common.php";
require "preise.php";
$acctid=$session[user][acctid];
$sql = "SELECT * FROM uvw WHERE ownerid='$acctid'";
$result = db_query($sql);
$row = db_fetch_assoc($result);
$sql = "SELECT * FROM xyz WHERE ownerid='$acctid'";
$result = db_query($sql);
$row = db_fetch_assoc($result);
addcommentary();
page_header...
')
Geht das auf die Art, oder muß ich das anders schreiben? Da ich das ganze noch in 9 weiteren Modulen zu verwenden gedenke und bereits in 4 so stehen habe, wäre es mir nun wichtig zu wissen, wie es aussehen muß, um das, notfalls, noch zu änderen und bei den übrigen gleich richtig zu machen. :wink:

Autor:  Eliwood [ Sa 26 Aug, 2006 23:16 ]
Betreff des Beitrags: 

Zuerst: DU überschreibst $row aus dem ersten Query mit dem aus dem zweiten Query.

Zweitens: es gibt auch eine andere Möglichkeit... Keine Garantie, ob das nun funktioniert:

$this->bbcode_second_pass_code('', 'SELECT
a.*,
b.*
FROM
`xyz` a
INNER JOIN
`qwertzu` b
USING(`ownerid`)
WHERE
a.`ownerid` = {$acctid}')

Das einzige Problem - Wenn Felder hier gleich heissen überschreiben die sich gegenseitig... ;)

Autor:  Morpheus [ Sa 26 Aug, 2006 23:27 ]
Betreff des Beitrags: 

Hmmm, ein Problem, und wenn ich es folgendermaßen am Seitenanfang schreibe:
$this->bbcode_second_pass_code('', '
require_once "common.php";
require "preise.php";
$acctid=$session[user][acctid];
$sql = "SELECT * FROM handelslager WHERE ownerid='$acctid'";
$result = db_query($sql);
while($row = db_fetch_assoc($result)) {
$row['lagerstein'],
$row['lagerholz'],
}
$sql = "SELECT * FROM handelswaren WHERE ownerid='$acctid'";
$result = db_query($sql);
$row = db_fetch_assoc($result);
$row['holz'],
$row['bretter'],
$row['rohstein'],
$row['baustein'],
}
addcommentary();
page_header...
')
Dann sollte es doch theoretisch gehen, das ich die Felder im gesamten Modul immer wieder ändern kann, da ich die Felder, die ich ändern will, ja vorher klar definiere, oder denke ich da jetzt falsch?

Autor:  Eliwood [ Sa 26 Aug, 2006 23:33 ]
Betreff des Beitrags: 

Wenn du es so machen willst, wie du, dann gibt es einen ganz leichten Trick: Variable umbennen oO

[php]$sql = "SELECT * FROM uvw WHERE ownerid='$acctid'";
$result = db_query($sql);
$row = db_fetch_assoc($result);
$sql2 = "SELECT * FROM xyz WHERE ownerid='$acctid'";
$result2 = db_query($sql);
$row2 = db_fetch_assoc($result); [/php]

Wenn du es so machst wie ich, dann ist es besser, wenn du die Felder aufzählst (Und nebenbei könntest du sie sogar noch umbennen ^^):

$this->bbcode_second_pass_code('', 'SELECT
a.`lagerstein`, a.`lagerholz`,
b.`holz`, b.`bretter`, b.`rohstein`, b.`baustein`
FROM
`handelslager` a
INNER JOIN
`handelswaren` b
USING(`ownerid`)
WHERE
a.`ownerid` = {$acctid}')


Dein Versuch oben war falsch. Gäbe einen Parse-Error ;)

Autor:  Morpheus [ Sa 26 Aug, 2006 23:41 ]
Betreff des Beitrags: 

Ahja, vielen Dank Eli, Du hast mir so eben den [Stoffwechselendproduktausscheidungsorgan] bei einem Megaprojekt gerettet :lol: und ich hab noch was dabei gelernt, das freut mich am meisten :)
Zwei Fragen hab ich allerdings noch:
1. Mag dumm klingen, aber, sehe ich das richtig, daß Du a und b nur zur Verdeutlichung dazu geschrieben hast?
2. Wenn ich aus 2 tables 1 Table machen würde, wäre der monumental groß, im Moment hat der handelslager 16 Einträge, der handelswaren 20, da 2 weg fallen würden (ownerid und ownername wären sonst doppelt) wären daß dann 34 Einträge, ist das nicht zuviel und bremst das System? Das war mein Grundgedanke, aus einem zwei zu machen...denn wenn ich das wieder falsch gesehen habe, mache daraus wieder einen table und änder die bestehenden Module dahin um, denn dann hab ich den ganzen Trouble nicht ;) :wink:

Und nochmal vielen Dank für die Lektion in SQL, um so mehr ich lerne, um so besser werde ich... :wink:

Autor:  Eliwood [ So 27 Aug, 2006 01:08 ]
Betreff des Beitrags: 

Morpheus hat geschrieben:
Ahja, vielen Dank Eli, Du hast mir so eben den [Stoffwechselendproduktausscheidungsorgan] bei einem Megaprojekt gerettet :lol: und ich hab noch was dabei gelernt, das freut mich am meisten :)
Zwei Fragen hab ich allerdings noch:
1. Mag dumm klingen, aber, sehe ich das richtig, daß Du a und b nur zur Verdeutlichung dazu geschrieben hast?
2. Wenn ich aus 2 tables 1 Table machen würde, wäre der monumental groß, im Moment hat der handelslager 16 Einträge, der handelswaren 20, da 2 weg fallen würden (ownerid und ownername wären sonst doppelt) wären daß dann 34 Einträge, ist das nicht zuviel und bremst das System? Das war mein Grundgedanke, aus einem zwei zu machen...denn wenn ich das wieder falsch gesehen habe, mache daraus wieder einen table und änder die bestehenden Module dahin um, denn dann hab ich den ganzen Trouble nicht ;) :wink:

Und nochmal vielen Dank für die Lektion in SQL, um so mehr ich lerne, um so besser werde ich... :wink:


Zu 1: Nein. Das ist diesmal keine veranschaulichung sondern "Variablen". Um Schreibplatz zu sparen hab ich nach "FROM `handelslager`" einen Leerschlag, gefolgt von einem a hingemacht. a ist nun ein Verweis auf handelslager. Genauso ist es mit b... Die Faulheit treibt dazu ;)

Zu 2: Wie du magst. Gut sortiert ist es vielleicht besser als alles in eine Tabelle gedrückt... ;)

Autor:  Morpheus [ So 27 Aug, 2006 01:31 ]
Betreff des Beitrags: 

Vielen Dank für die Aufklärung, denn da wäre beides möglich gewesen...sowohl zur Erläuterung, als auch so, wie es gedacht war von Dir. :)

Ja, gut sortiert ist mir eigentlich auch lieber, aber um ehrlich zu sein, übersichtlicher, was die Programmierung angeht, ist für mich dan schon 1 Riesentable und wenn das keine Auswirkung auf die Geschwindigkeit hat, dann neige ich eindeutig dazu.
Ich hab grade mal die Datenbank durchgesehen, der längste table, neben Acounts, ist Mounts, wobei meiner länger wäre als zweit- und kürzer als erstgenannter. Ich denke, dahin werde ich auch ausweichen und die bestehenden dahingehend nochmal modifizieren.
Mit der Hilfestellung jetzt kann ich dann ruigen Gewissens weiter programmieren, besten Dank. :wink:

Und sollte ich dann wirklichmal in die Verlegenheit zweier table kommen, die ich in einem Modul mehrfach änder, werde ich auf Deine Lösung zurück greifen... ;)

P.S.EDIT: Du hast Post Eli... ;)

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/