[PHP] Aus 2 Tabellen auslesen

M

McNiko

Gast
Nabend, ich habe mal eine Frage, ich will aus 2Tabellen 2Felder gleichzeitig auslesen:

Aus user = userklick
Aus gaestebuch = timestamp

So klappt es ja nicht:

PHP:
$szMySQL = "SELECT * FROM user WHERE UserID = '".$_SESSION['userid']."'";

$szMySQL = "SELECT * FROM gaestebuch WHERE UserID = '".$_SESSION['userid']."'";

Danke

mfg
 
timestamp ist aber ein denkbar schlechter Bezeichner...

Das geht mit einem LEFT JOIN, je nach Anwendungsfall wäre INNER JOIN möglich/sinnvoll:
Code:
SELECT a.userklick, b.timestamp
FROM user
LEFT JOIN gaestebuch
USING (UserID)
WHERE a.UserID = 'userID'

greetings, Keita
 
Ein normaler join sollte vollkommen ausreichen ;-)

Bei left join werden die felder mit null aufgefüllt, wo die join bedingung nicht zutrifft

Dann sollte dann in etwa so aussehen:

SELECT u.userklick, t.timestamp
FROM user u, gaestebuch g
WHERE u.userID='userID'
AND t.userID='userID'
 
Das ist faktisch ein INNER JOIN und kein "normaler" JOIN ;) Ein INNER JOIN ist nicht die Summe zweier JOINs, weil sie lediglich die Schnittmenge ermittelt, für den Fall, daß das gewünscht ist, hatte ich ja den Hinweis auf den INNER JOIN gegeben.

greetings, Keita
 
Ich habe es jetzt so gemacht:

PHP:
include("verbindung.php");

$szMySQL = "SELECT a.Userklick, b.Timestamp FROM user LEFT JOIN gaestebuch USING (UserID) WHERE a.UserID = 'userID'";

echo $sqlRowMySQL->b.Timestamp;

...aber irgentwie gibt der nur "Timestamp" aus (das Wort) ;)
 
Das SQL Statement liefert zwei Felder, die nach den Zellennamen benannt sind, in diesem Fall also Userklick und Timestamp.

Der Ausdruck $sqlRowMySQL->b.Timestamp; ist in PHP nicht atomar, sondern setzt sich aus zwei Operanden und einem Operator zusammen:

Code:
$sqlRowMySQL->b . Timestamp;

Du pappst also an den Inhalt von $sqlRowMySQL->b den Inhalt der symbolischen Konstante Timestamp dran, da keine Konstante diesen Namens existiert, konvertiert PHP den Bezeichner zu einer literalen Konstante:

Code:
$sqlRowMySQL->b . 'Timestamp';

Und weil $sqlRowMySQL->b nicht existiert, kommt am Ende nur "Timestamp" raus.

Korrekt wäre also
Code:
echo $sqlRowMySQL->Timestamp;


greetings, Keita
 
Du mußt schon eine "echte" ID in das SQL Statement einbinden:

PHP:
$szMySQL = "SELECT a.Userklick, b.Timestamp FROM user LEFT JOIN gaestebuch USING (UserID) WHERE a.UserID = '" . $_SESSION['userid'] . "'";

greetings, Keita
 
Habe es so gemacht:

PHP:
<?

include("verbindung.php");

$szMySQL = "SELECT a.Userklick, b.Timestamp FROM user LEFT JOIN gaestebuch USING (UserID) WHERE a.UserID = '" . $_SESSION['userid'] . "'";

$sqlErgebnis = mysql_query($szMySQL);

while($sqlRowMySQL = mysql_fetch_object($sqlErgebnis))
{

echo $sqlRowMySQL->Timestamp;

}

?>

...aber auch so kommt ein Fehler:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in *** on line 9

Und so:
PHP:
<?

include("verbindung.php");

$szMySQL = "SELECT a.Userklick, b.Timestamp FROM user LEFT JOIN gaestebuch USING (UserID) WHERE a.UserID = '" . $_SESSION['userid'] . "'";

echo $sqlRowMySQL->Timestamp;

?>

...gibt er wieder garnichts aus
 
Ich sehe gerade, daß ich oben im Posting etwas vergessen hatte, der Query muß heißen:
PHP:
"SELECT a.Userklick, b.Timestamp FROM user a LEFT JOIN gaestebuch b USING (UserID) WHERE a.UserID = '" . $_SESSION['userid'] . "'";

Das hättest du aber auch rausfinden können, wenn du die Fehlermeldung(en) ausgelesen hättest ;)

greetings, Keita
 
...irgentwie will es immernoch nicht funzen

PHP:
<?

include("verbindung.php");

$szMySQL = "SELECT a.Userklick, b.Timestamp FROM user a LEFT JOIN gaestebuch b USING (UserID) WHERE a.UserID = '" . $_SESSION['userid'] . "'";

$sqlErgebnis = mysql_query($szMySQL);

while($sqlRowMySQL = mysql_fetch_object($sqlErgebnis))
{

echo $sqlRowMySQL->Timestamp;

}

?>

danke

mfg
 
PHP:
<?php 
include("verbindung.php"); 

$szMySQL = mysql_query("SELECT a.Userklick, b.Timestamp FROM user a LEFT JOIN gaestebuch b USING (UserID) WHERE a.UserID = '" . $_SESSION['userid'] . "'");

echo mysql_error(); 

while($sqlRowMySQL = mysql_fetch_object($szMySQL)) 
{ 
  echo $sqlRowMySQL->Timestamp; 
} 
?>
 
Zuletzt bearbeitet:
THX @ KonKorT: Es klappt aber leider gibt er zu viele Zahlen aus 117249655411724965541172496554 wie kann ich das auf die normalen 1172496554 beschrenken, sehe gerade das er die zahl 3 mal hintereinander ausgibt!
 
Den nächsten Wert einfach in die nächste Zeile packen ;)

PHP:
<?php 
include("verbindung.php"); 

$szMySQL = mysql_query("SELECT a.Userklick, b.Timestamp FROM user a LEFT JOIN gaestebuch b USING (UserID) WHERE a.UserID = '" . $_SESSION['userid'] . "'");

while($sqlRowMySQL = mysql_fetch_object($szMySQL)) 
{ 
  echo $sqlRowMySQL->Timestamp."<br />"; 
} 
?>
 
PHP:
<?php 
include("verbindung.php"); 

$szMySQL = mysql_query("SELECT DISTINCT a.Userklick, b.Timestamp FROM user a LEFT JOIN gaestebuch b USING (UserID) WHERE a.UserID = '" . $_SESSION['userid'] . "'");

while($sqlRowMySQL = mysql_fetch_object($szMySQL)) 
{ 
  echo $sqlRowMySQL->Timestamp; 
} 
?>
 
Also wenn ich es so ausgebe:

PHP:
<?php
include("verbindung.php"); 

$szMySQL = mysql_query("SELECT DISTINCT a.Userklick, b.Timestamp FROM user a LEFT JOIN gaestebuch b USING (UserID) WHERE a.UserID = '" . $_SESSION['userid'] . "'");

while($sqlRowMySQL = mysql_fetch_object($szMySQL)) 
{ 
  echo $sqlRowMySQL->Timestamp;

  echo "<br><br>";

  echo $sqlRowMySQL->Userklick;
}
?>

...kommt das heraus:

1171731833

11725051271171731798

11725051271171731654

1172505127

macht irgentwie keinen sinn!

mfg
 
Zurück
Oben