SEO-Software von Suchmaschinenoptimierung.de

mehrere tabellen auslesen!

(hier klicken, um zum Original Thread zu gelangen)
Gamer20
ich lasse nutzer in einer bestimmten altergruppe ausgeben, dann benötige von dieser person aus adneren tabellen noch ein paar informationen.

jetzt wollt ich das zusammen fassen, denn so wie ich es aktuelle habe, dürft es etwas umständlich werden:


code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
$BALT = '(YEAR(CURRENT_DATE) - YEAR(GEB)) - (RIGHT(CURRENT_DATE,5) < RIGHT(GEB,5))';
$ausgabe = mysql_query("SELECT *, LEFT((CURRENT_DATE - `GEB`),2) AS deltaT  FROM nutzer WHERE $BALT >= $avon AND $BALT <= $abis ORDER BY GEB");

while($i = mysql_fetch_array($ausgabe))
{
$ID=$i['ID'];
$Nick=$i['Nick'];
$deltaT=$i['deltaT'];

$aus = mysql_query("SELECT NR,Status FROM profil WHERE NR = $ID");
$a = mysql_fetch_array($aus);
$Status=$a['Status'];

$aus = mysql_query("SELECT NR,sein FROM eprofil WHERE NR = $ID");
$a = mysql_fetch_array($aus);
$sein=$a['sein'];
$gesucht=$a['gesucht'];

$aus = mysql_query("SELECT ID,NID,NID2 FROM favoriten WHERE NID=$ID AND NID2 = $in1[5]");
$a = mysql_fetch_array($aus);
$GID=$a['ID'];


wie kann ich profil und eprofil tabelle zusammen fassen bzw. gemeinsam auslesen, so das ich mir einen block spare?

so hab ich es jetzt hin bekommen!

folgede tabellen enthalten folgende spalten (tabelle = stalte(n))
profil = status
eprofil = sein & gesucht

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
$BALT = '(YEAR(CURRENT_DATE) - YEAR(Geburt)) - (RIGHT(CURRENT_DATE,5) < RIGHT(Geburt,5))';
$ausgabe = mysql_query("SELECT *, LEFT((CURRENT_DATE - `Geburt`),2) AS deltaT  FROM nutzer WHERE $BALT >= $avon AND $BALT <= $abis ORDER BY Geburt");

while($i = mysql_fetch_array($ausgabe))
{$ID=$i['ID'];
$Nick=$i['Nick'];
$deltaT=$i['deltaT'];

$aus = mysql_query("SELECT profil.Status, eprofil.sein, eprofil.gesucht FROM profil,eprofil,favoriten WHERE profil.NR = $ID AND eprofil.NR = $ID
OR (favoriten.NID = 1 AND favoriten.NID2 = $ID)");

$a = mysql_fetch_array($aus);
$gesucht=$a['gesucht'];
$Status=$a['Status'];
$sein=$a['sein'];
$GID=$a['ID'];
}




jetzt gibt es aber ein problem mit dem code

code:
1:
2:
3:
OR (favoriten.NID = 1 AND favoriten.NID2 = $ID)");


hier braucht die DB eine weile (ca. 1 sekunde bei ein paar wenigen einträgen), was net normal ist (als ob es eine schleife geben würde)!

denn die sache ist, das die ersten beidentabellen (profil,eprofil) beide eine spalte NR haben, wo die NutzeriD drin ist (bis dahin klappts ja)


ABER die 3. tabelle hat 2 andere spaltennamen und deswegen dauert aus wohl eine weile, was ich mir aber net erklären kann)

also müßt ich die abfrage aus der 3. tabelle per UNION befehl machen statt das so wie jetzt zusammen zu klatschen in 1 zeile?

wie müßte sie synthax sein wenn ich aus der 3. tabelle per UNION was auslesen lassen will?
TrioxX
Gamer20
hmm net per union, sonder per join? hmm das kann ne weile dauern, da muß ich mich erstmal durchlesen, was das alles zu bedeuten hat (laut deinem link).

denn join sagt mir im moment 0!
Gamer20
also ich schnall das net,ich komm mit dem kaudewelsch net zurecht.

hab noch was von unterabfragen gelesen, wie schauts damit aus?
KrickelD
wenn du zwei (oder mehr) tabellen miteinander verknüpfst, dann muss du mysql auch mitteilen, welche daten bzw. ID in der einen tabellen zu der ID aus der anderen tabelle passt

SELECT tab1.feld1, tab1.feld2, tab2.andere1 FROM tab1, tab2
WHERE tab1.id = tab2.id

so würdest du zwei tabellen verknüpfen, das als grundlage. ohne diese basics werden komplexere abfragen der horror. wenn du wirklich auch in zukunft mit mysql arbeiten möchtest dann würde ich dir dieses tutorial ans herz legen

http://tut.php-quake.net/de/

sieht lang aus aber man kann es recht schnell durcharbeiten. und man kommt schnell zum gewünschten erfolg Augenzwinkern
Gamer20
ja das is mir klar, so halbwegs funktioniert ja (hab ich ja auch so hin bekomm)! nur der letzte block mit den favoriten ist eine separate abfrage und da hab ich nun gelesen (wenn es richtig war) das man UNION nehmen sollte!

denn ich wollt nicht nochmal einen extra block mit query machen, daher wollt ich 2 abfragen in 1 query zusammen packen.

also profil und eprofil kann man als 1 abfrage nehmen und favoriten als eine 2.!

falls man JOIN ist sdoch eher zum verknüpfen bzw. abgleichen 2er tabellen???
KrickelD
du hast recht, mysql-abfragen in einer schleife sind (in den meisten fällen) unschön...

mit UNION kannst du aus mehreren tabellen gleichzeitig einträge ziehen, bei denen der aufbau gleich/ähnlich ist und z.b. nur die feldnamen anders lauten. alles wird in einem ergebnis zurückgegeben:

http://www.selfphp.de/praxisbuch/praxisb...group=48&page=2
Gamer20
tja so wie aussieht, muß ich die selbe anzahl an zu abfragenden spalten in beiden tabellen haben.

aber in einer tabelle brauch ich nur 1 spalten- und in der anderen 2 spalteninfos!

gibts eine möglichkeit 2 unabhängige abfragen in eine query ausgabe rein zu packen???

im moment hab ich es so:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
$aus = mysql_query("SELECT profil.Status, eprofil.sein, eprofil.gesucht FROM profil,eprofil,favoriten WHERE profil.NR = $ID AND eprofil.NR = $ID
UNION SELECT favoriten.NID, favoriten.NID2, favoriten.Kommentar FROM favoriten WHERE favoriten.NID = '1' AND favoriten.NID2 = '430'");

echo mysql_error();

$a = mysql_fetch_array($aus);
$gesucht=$a['gesucht'];
$Status=$a['Status'];
$sein=$a['sein'];
$ID=$a['ID'];
$Kommentar=$a['Kommentar'];

echo"
$Nick - $Status - $Kommentar
<br>";


da kommt zwar keine fehlermeldung, aber der inhalt der ensprechenden zelle, aus der spalte "kommentar" ist leer, obwohl dort was drin steht.

wo ist da das problem?
TrioxX
Sollte doch wohl auch eprofil.gesucht heißen, oder?

Mach doch mal var_dump($a); und schau, welche Werte dir zur Verfügung stehen.
Gamer20
ok das ist der inhalt:

array(6) {
[0]=> string(1) "5" ["Status"]=> string(1) "5"
[1]=> string(2cool "testext testext testext" ["sein"]=> string(2cool "testext testext testext"
[2]=> string(1) "1" ["gesucht"]=> string(1) "1" }

array(6) {
[0]=> string(1) "1" ["Status"]=> string(1) "1"
[1]=> string(59) "ne bla bla bla text" ["sein"]=> string(59) "ne bla bla bla text"
[2]=> string(3) "012" ["gesucht"]=> string(3) "012" }

also hier fehlen somit 3 array einträge und das wäre dann der teil mit den favoriten. wenn ich es mit php zähle (count) sind es 6 einheiten, darum dacht ich wohl das es leer wäre, aber die sind wohl gar net vorhanden.


was meinst mit eprofil.gesucht???

meinst "$gesucht=$a['gesucht'];"?

na s das dann netegal? wird ja trotzdem ausgegeben.

nur der teil nach union der ist wohl leer (kommentar -> brauche nur diesen wert aus favoriten tabelle)

leider bringt mich das jetzt auch net viel weiter, weiß leider immer noch net was jetzt direkt falsch ist.
(hier klicken, um zum Original Thread zu gelangen)



Tipp: Ranking-Konzept.de - Das SEO-Forum (Forum rund um die Suchmaschinenoptimierung) der artaxo AG.
Das große Versicherungs ABC von Versicherung.de - mit allen Aspekten der Computerversicherungen!
Fan-Foren.de, die große Community mit Musikforum ist ab sofort online.