mysql verknüpfungs problem

bfw

Grünschnabel
Hi, folgendes mysql-Verknüpfungs-Problem

Tabelle1:
ID....Name
1.....a
2.....b
3.....c

Tabelle 2:
ID....ID.ID......Attribute_type....Attribute_val
1.....1...........adresse.............abc strasse
2.....1...........url.....................http://www.hilfe.net
3.....1...........sonstiges...........irgendwas
4.....2...........adresse..............xz gasse
5.....2...........url......................http://www.zzz.com
6.....2...........sonstiges............keine ahnung

Ich möchte jetzt nach einer Adresse suchen und zusätzlich zum Namen auch die Url in einem Datensatz ausgeben. Ich bekomme aber leider immer nur eines von Beiden (Adresse oder Url) mit meiner Tabelle 1 verknüpft.

Gewünschtes Ergebnis:
ID...Name.....Attribute_type....Attribute_type
1....name......adresse.............url

Leider ist es mir auch nicht möglich die Datenstruktur in der Tabelle 2 zu ändern.
(MySQL 3.23.55)

Um hilfreiche Lösungsansätze bin ich dankbar

lg
Bernd
 
Mehrfache Verknüpfungen mit derselben Tabelle kannst Du mit LEFT JOIN und Alias-Tabellennamen lösen. Hier ein Beispielstatement (*):
Code:
SELECT 
Tabelle1.ID AS ID, 
Tabelle1.Name AS Name,
tabURL.Attribute_type AS URL_Type,
tabURL.Attribute_value AS URL_Value,
tabADR.Attribute_type AS ADR_Type,
tabADR.Attribute_value AS ADR_Value
FROM Tabelle1
LEFT JOIN Tabelle2 AS tabADR
ON (tabADR.Attribute_type LIKE 'adresse' 
    AND tabADR.tabelle1_ID=Tabelle1.ID)
LEFT JOIN Tabelle2 AS tabURL
ON (tabURL.Attribute_type LIKE 'url' 
    AND tabURL.tabelle1_ID=Tabelle1.ID)
GROUP BY Tabelle1.ID
ORDER BY Tabelle1.Name
Gruß hpvw

(*) Der Code ist nur Beispielhaft und muss ggf. auf Deine Tabellenstruktur angepasst und von Syntaxfehlern bereinigt werden.
 
Hi, nun danke für das Skript - Ich hab meines auch gleich umgebaut aber leider funk es noch immer nicht!

Ich hab jetzt mal das gesamte Skript unten eingefügt, möglicherweise liegst ja an etwas anderem.

Danke
Bernd


<?php

require ("config.inc.php");

$db = mysql_connect($dbserver,$nutzer,$passwort);

$satz = mysql_db_query($dbname,
"SELECT
item.id AS ID,
item.title AS Name,
tabURL.idem_id AS URL_ID,
tabURL.s_attribute_type AS URL_Type,
tabURL.attribute_val AS URL_Value,
tabADR.idem_id AS ADR_ID,
tabADR.s_attribute_type AS ADR_Type,
tabADR.attribute_val AS ADR_Value
FROM image
LEFT JOIN image_attribute AS tabADR ON (tabADR.attribute_val LIKE '%".$ssearch."%' AND tabADR.item_id = item.id)
LEFT JOIN immage_attribute AS tabURL ON (tabURL.s_attribute_type LIKE 'IMAGEURL' AND tabURL.item_id = item.id)
GROUP BY item.id
GROUP BY item.title");

$num = mysql_num_rows($satz);

echo "
<?xml version='1.0'?>
<nachrichten>";

for ($i=0;$i<$num;$i++) {

$lnewsid = mysql_result($satz,$i,"ID");
$ltitel = mysql_result($satz,$i,"Name");
$lactor = mysql_result($satz,$i,"ADR_Value");
$lpic = mysql_result($satz,$i,"URL_Value");

$ltitel = ereg_replace("'", "", $ltitel);
$ltitel = stripslashes($ltitel);


echo "
<news id='$lnewsid' titel='$ltitel' actor='$lactor' pic='$lpic'>
</news>
";

}

echo "
</nachrichten>
";

mysql_close($db);

?>
 
  1. Wird das ganze nicht funken, denn da ist keine Antenne dran.
  2. Verknüpfst Du einmal die Tabelle image_attribute und beim zweiten mal die Tabelle immage_attribute. Ich vermute, da liegt ein Tippfehler vor.
  3. Darf ein Query meines Wissens nur einmal das Schlüsselwort GROUP BY beinhalten.
  4. Fehlt die Fehlerausgabe in Deinem letzten Post. Du solltest nachdem Du das Query ausführst echo mysql_error(); in Deinen Code schreiben und uns die Fehlermeldung mitteilen.
Gruß hpvw
 
Danke noch mals, für die Hilfe!
Die meisten Fehler sind aber immer die selbstgemachten (man sollte lesen und schreiben können) und nachdem ich mir die Funktionsweise des LEFT JOIN genauer durchgelesen habe hat es auch auf anhieb funktioniert.

Danke
Bernd
 
Zurück