Query Problem

alex130

Erfahrenes Mitglied
Hi
Ich hab ein Problem und zwar, hab ich folgenden Code:
PHP:
while($row = mysql_fetch_assoc($sql))
	{	
	
		$username1 = 'SELECT `username` FROM `user` WHERE `id` = "'.$row['id'].'"';
		
		echo '
  		<tr>
    	<td>'.$row['id'].'</td>
    	<td>'; 
		if($row['kategorie'] == '1')
		{
			echo 'Verkauf';
		}
		elseif($row['kategorie'] == '2')
		{
			echo 'Suche';
		}
		elseif($row['kategorie'] == '3')
		{
			echo 'Dienstleistungen';
		}
		echo '</td>
		<td><a href="../index.php?site=artikel_anzeigen&amp;id='.$row['id'].'">'.$row['titel'].'</a></td>
		<td>'.mysql_query($username1).'</td>
		<td>'.date('d.m.Y / H:i', ($row['datum'] == '' ? 0 : $row['datum'])).'</td>
    	<td><a href="index.php?site=artikel&amp;action=list_all&amp;do=del&amp;id='.$row['id'].'" onclick="return confirm (\'Soll der Artikel '.$row['id'].' wirklich gelöscht werden?\');"><img src="../images/loeschen.png" alt="l&ouml;schen" title="l&ouml;schen"  /></a>';
		echo '</td>
  		</tr>';
	}
Und bei $username1 sollte der jeweilige username stehen, doch dort steht nur:
Code:
Resource id #9
Resource id #10
Resource id #11
Resource id #12

Was mache ich falsch?
Thx
 
Hi
Wie muss mein $sql bei nem JOIN aussehen? Habe es nur soweit geschafft ^^
PHP:
$sql = mysql_query('SELECT * AS a FROM `artikel`

//edit: Hab hier noch was versucht, das stimmt aber auch nicht, oder?
lg
PHP:
$sql = mysql_query('SELECT artikel.*,user.* FROM artikel, user WHERE user.id = artikel.user_id');
 
Zuletzt bearbeitet:
Ein Join würde z.B. so aussehen:
PHP:
mysql_query("
            SELECT 
                a.`id`,
                a.`titel`,
                a.`kategorie`,
                a.`datum`,
                a.`id`,
                u.`username`
            FROM
                `artikel` AS a
            LEFT JOIN
                `user` AS u
            ON
                 u.`id`=a.`user_id`
                   ");
Ich habe das Join mal aus den von dir gegeben Daten gemacht, welche "where"-Bedingungen du evtl. noch für die Artikel hast, wusste ich daher nicht ;)
 
Hi
Danke, aber kann man bei einem JOIN nicht einfach machen SELECT a.* ?
Und wie lese ich die dann aus? Normalerweise mache ich das dann mit $row['id'] oder so und mach ich das hier dann so: $row['a.id']?
lg
 
Du kannst natürlich auch a.* machen, nur ich mag eine feste Feldauswahl lieber, so läd man nur das, was man laden muss/will.

Wenn du es so machst, kannst du auf die angegeben Felder ganz normal per $row['id'] zugreifen. Es könnte bei a.*, u.* zu einem Problem kommen, dass das Feld id doppelt ist. Wenn das der Fall ist, kann es beim aufrufen von $row['id'] zu Problemen kommen, weil es im mysql result zwei mal das Feld id gibt.
 
//edit: Hab hier noch was versucht, das stimmt aber auch nicht, oder?
lg
PHP:
$sql = mysql_query('SELECT artikel.*,user.* FROM artikel, user WHERE user.id = artikel.user_id');

Es gibt verschiedene JOIN-Methoden. Das was du geschrieben hast ist auch eine JOIN Variante und soweit ich das sehen kann (sehe die tabellen dazu nicht), wäre dieser richtig (Es sei denn, du hast in beiden Tabellen ein Feld >> ID << drin, was du dann machen musst, siehe unten).

Zu deiner anderen Frage
Hi
Danke, aber kann man bei einem JOIN nicht einfach machen SELECT a.* ?
Und wie lese ich die dann aus? Normalerweise mache ich das dann mit $row['id'] oder so und mach ich das hier dann so: $row['a.id']?
lg
Ja, da kannst du auch a.* machen. Auch kannst du die elemente ganz normal weiter so abrufen wie bisher.

Bei einem Join musst du ein wenig aufpassen mit den Namensvergaben. Angenommen du hast in jeder Tabelle ein Feld names "ID", dann musst du diese aber im Statement unterschiedlich kennzeichen.

Bsp:
Code:
Select user.id AS UID, artikel.id AS AID FROM ...



Dersweiteren empfiehl es sich vielleicht (bei großen Selects), immer nur die nötigen Felder zu selektieren und nicht a.*. Bei großen DB-Abfragen ist dies performancelastiger
 
Nein einfach wie bisher mit $row['id'] wenn es spalten mehrfach gibt würde ich dir anraten AS zu verwenden um der Spalte einen neuen namen zuzuweisen der dann wieder eindeutig wird.

Aber mit der query oben hast du einfach noch ein $row['username'] wo der inhalt aus der anderen Tabelle steht.
 
Hi
Danke ich verstehe was ihr meint, aber ich bekomm den Query einfach nicht richtig hin, mein Query sieht jetzt so aus:
PHP:
	$sql = mysql_query("SELECT a.`id` AS aid FROM `artikel` LEFT JOIN 
                a.`titel`,
                a.`kategorie`,
                a.`datum`,
                u.`username`
            FROM
                `artikel` AS a
            LEFT JOIN
                `user` AS u
            ON
                 u.`id`=a.`user_id`
                   ");
Was mach ich hier falsch?
Thx
 
Zurück