php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 21.03.2005, 09:24  
Gast
 
Beiträge: n/a
Standard [Erledigt] LEFT JOIN Problem

hi!

ich hab folgendes sql-statement:

Code:
SELECT touren.lang, touren.id AS tour_id, touren.region_id, touren.tourenthema_id_1, touren.tourenthema_id_2, touren.tourenthema_id_3, touren.tourenthema_id_4, touren.id, touren.titel, touren.kurzbeschreibung, touren.langbeschreibung, 
region.id, region_name, 
tourenthema.id, tourenthema.tourenthema_name AS t_name 
FROM 
touren 
LEFT JOIN region ON touren.region_id=region.id 
LEFT JOIN tourenthema ON touren.tourenthema_id_1=tourenthema.id AND touren.tourenthema_id_2=tourenthema.id AND touren.tourenthema_id_3=tourenthema.id AND touren.tourenthema_id_4=tourenthema.id 
WHERE touren.id='$id'
ich hab jetzt tourenthema_id_1, tourenthema_id_2, tourenthema_id_3 und tourenthema_id_4... wie weise ich jetzt jeder id den tourenthema namen ( t_name ) aus der tourenthema-tabelle zu?

thx!

i_am
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 21.03.2005, 11:09  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Da gibt es ein Design-Problem. Offensichtlich besteht zwischen touren und themen eine n:n-Beziehung, Die müsste eigntlich mit einer entsprechenden Beziehungs-Tabelle mit den Attributen touren_id und themen_id aufgelöst werden. Dann bist du einerseite auch nicht auf vier Themen pro Tour beschränkt, andererseits hast du auch nicht leere Felder in der Tabelle, wenn du z.B. nur ein Thema pro Tour hast.
Wenn du es unbedingt mit der bestehenden Struktur lösen willst, brauchst du natülich die entsprechende Anzahl Joins auf die Themen. Das würde dann etwa so aussehen:
Code:
SELECT
    t.lang,
    t.id AS tour_id,
    t.region_id,
    t.tourenthema_id_1,
    t.tourenthema_id_2,
    t.tourenthema_id_3,
    t.tourenthema_id_4,
    t.id,
    t.titel,
    t.kurzbeschreibung,
    t.langbeschreibung,
    r.id,
    r.name,
    tt.id,
    tt1.tourenthema_name AS t_name1
    tt2.tourenthema_name AS t_name2
    tt3.tourenthema_name AS t_name3
    tt4.tourenthema_name AS t_name4
FROM
    touren t
LEFT JOIN region r ON t.region_id = r.id
LEFT JOIN tourenthema tt1 ON t.tourenthema_id_1 = tt.id
LEFT JOIN tourenthema tt2 ON t.tourenthema_id_2 = tt.id
LEFT JOIN tourenthema tt3 ON t.tourenthema_id_3 = tt.id
LEFT JOIN tourenthema tt4 ON t.tourenthema_id_4 = tt.id
WHERE touren.id = $id
Aber wie gesagt, würde ich dir empfehlen, die Beziehung aufzulösen.
__________________
Gruss
L
lazydog ist offline   Mit Zitat antworten
Alt 21.03.2005, 11:28  
Gast
 
Beiträge: n/a
Standard

hi!

vielen dank!

das einzige problem ist jetzt noch das immer nur der erste tabelleneintrag in tourenthema genommen wird...

Code:
if($erg->tourenthema_id_2 != "") echo "Tourenthema ( 2 ): ",$erg->t_name2,"
";
if($erg->tourenthema_id_3 != "") echo "Tourenthema ( 3 ): ",$erg->t_name3,"
";
if($erg->tourenthema_id_4 != "") echo "Tourenthema ( 4 ): ",$erg->t_name4,"
";
die ausgabe sieht dan wie folgt aus:

Tourenthema ( 2 ):
Tourenthema ( 3 ):
Tourenthema ( 4 ): Familienwanderwege

also:

Tourenthema ( 2 ): hier müsste Bergwanderweg stehen...
Tourenthema ( 3 ): hier auch...

Familienwanderwege ist eben der erste eintrag in der tourenthema tabelle... bei den anderen kommt nichts...


thx!

i_am
  Mit Zitat antworten
Alt 21.03.2005, 12:40  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Was steht dann in den touren_thema_id's? Am besten, du machst mal ein var_dump() auf $erg
__________________
Gruss
L
lazydog ist offline   Mit Zitat antworten
Alt 21.03.2005, 13:17  
Gast
 
Beiträge: n/a
Standard

var_dump:

Code:
object(stdClass)(16)
{
	["lang"]=> string(2) "DE"
	["tour_id"]=> string(2) "37"
	["region_id"]=> string(1) "1"
	["tourenthema_id_1"]=> string(1) "2"
	["tourenthema_id_2"]=> string(1) "3"
	["tourenthema_id_3"]=> string(1) "4"
	["tourenthema_id_4"]=> string(1) "2"
	["id"]=> string(1) "2"
	["titel"]=> string(4) "test"
	["kurzbeschreibung"]=> string(4) "test"
	["langbeschreibung"]=> string(4) "test"
	["region_name"]=> string(62) "Naturarena"
	["t_name1"]=> string(18) "Familienwanderwege"
	["t_name2"]=> NULL
	["t_name3"]=> NULL
	["t_name4"]=> string(18) "Familienwanderwege"
}
wenn ich das sql-statement in den phpmyadmin reinkopiere bekomme ich komischerweise 15 ergebnisse...

thx!

i_am
  Mit Zitat antworten
Alt 21.03.2005, 14:10  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Und was gibt "select * from tourenthema " aus?
__________________
Gruss
L
lazydog ist offline   Mit Zitat antworten
Alt 21.03.2005, 14:14  
Gast
 
Beiträge: n/a
Standard

SELECT * FROM tourenthema:
Code:
id | tourenthema_name | tourenthema_beschreibung | lang

2 | Familienwanderwege | Bequeme, breite Wege... | DE
3 | sdfh | we45u w4s57 zhdsgh | DE
4 | ttttttttttttttttttttttttttt | ttttttttttttttttttt | DE

thx!

i_am
  Mit Zitat antworten
Alt 21.03.2005, 14:52  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Also müsste bei tt1 nichts, und bei dem andern der jeweilige Name ausgegeben werden. Ich kenne deine Abfrage nicht, um meine kann es sich nicht handeln, da diese noch mehrere Fehler enthält, aber in dieser Form sollte es gehen:
Code:
SELECT
    t.lang,
    t.id AS tour_id,
    t.region_id,
    t.tourenthema_id_1,
    t.tourenthema_id_2,
    t.tourenthema_id_3,
    t.tourenthema_id_4,
    t.id,
    t.titel,
    t.kurzbeschreibung,
    t.langbeschreibung,
    r.name,
    tt1.tourenthema_name AS t_name1,
    tt2.tourenthema_name AS t_name2,
    tt3.tourenthema_name AS t_name3,
    tt4.tourenthema_name AS t_name4,
FROM
    touren t
LEFT JOIN region r ON t.region_id = r.id
LEFT JOIN tourenthema tt1 ON t.tourenthema_id_1 = tt1.id
LEFT JOIN tourenthema tt2 ON t.tourenthema_id_2 = tt2.id
LEFT JOIN tourenthema tt3 ON t.tourenthema_id_3 = tt3.id
LEFT JOIN tourenthema tt4 ON t.tourenthema_id_4 = tt4.id
WHERE touren.id = $id
Die Id's von region und thema abzufragen macht keinen Sinn, da diese schon aus der Grundtabelle vorhanden sind
__________________
Gruss
L
lazydog ist offline   Mit Zitat antworten
Alt 21.03.2005, 14:57  
Gast
 
Beiträge: n/a
Standard

hallo!

da bekomm ich jetzt folgenden error: "SQL-Error: Unknown table 'touren' in where clause"

die tabelle "touren" existiert aber...


mein sql sah so aus:
Code:
SELECT 
    		t.lang, 
		    t.id AS tour_id, 
		    t.region_id, 
		    t.tourenthema_id_1, 
		    t.tourenthema_id_2, 
		    t.tourenthema_id_3, 
		    t.tourenthema_id_4, 
		    t.id, 
		    t.titel, 
		    t.kurzbeschreibung, 
		    t.langbeschreibung, 
		    r.id, 
		    r.region_name, 
		    tt.id, 
		    tt1.tourenthema_name AS t_name1, 
		    tt2.tourenthema_name AS t_name2, 
		    tt3.tourenthema_name AS t_name3, 
		    tt4.tourenthema_name AS t_name4 
		FROM 
		    touren t , tourenthema tt
		LEFT JOIN region r ON t.region_id = r.id 
		LEFT JOIN tourenthema tt1 ON t.tourenthema_id_1 = tt.id 
		LEFT JOIN tourenthema tt2 ON t.tourenthema_id_2 = tt.id 
		LEFT JOIN tourenthema tt3 ON t.tourenthema_id_3 = tt.id 
		LEFT JOIN tourenthema tt4 ON t.tourenthema_id_4 = tt.id 
		WHERE t.id = $id
thx!

i_am
  Mit Zitat antworten
Alt 21.03.2005, 15:04  
Gast
 
Beiträge: n/a
Standard

hallo nochmal!

vielen dank für deine hilfe!

"WHERE t.id = $id" -> jetzt gehts...

ich muss mir endlich das mit den joins aneignen...


thx!

cu,
i_am
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] LEFT JOIN auf mehrere Spalten nystagmussen Datenbanken 3 22.07.2008 08:05
performance problem mit join leo Datenbanken 4 14.01.2008 22:31
Ein kleines Join Problem (MySQL) susi85 Datenbanken 12 12.12.2007 20:00
WHERE-Clause im Left Join cycap Datenbanken 2 06.11.2007 11:06
problem mit php 5/mysql 5 rieso PHP Tipps 2006 4 10.06.2006 09:42
JOIN problem 2 tabellen - zeile(tab1) zu spalte(tab2) Ministry Datenbanken 7 31.05.2006 10:31
Problem mit Inner join Jabi Datenbanken 15 09.05.2006 14:10
Problem bei JOIN MilanX Datenbanken 3 03.05.2006 16:36
Left outer join, timestamps php-newbie83 Datenbanken 29 27.04.2006 09:29
Anzahl Bestellungen per LEFT JOIN dauert, dauert, dauert ... Datenbanken 13 06.02.2006 19:15
sql left join läuft auf testserver, aber nicht im i-net PHP Tipps 2005 7 13.05.2005 09:45
[Erledigt] Menülinks in Kategorien per Left join Datenbanken 20 14.03.2005 12:43
[Erledigt] left outer join mit bedingung Datenbanken 2 04.03.2005 00:52
den letzte(grösten) eintrag aus LEFT JOIN Datenbanken 2 24.07.2004 18:33
SQL Abfrage mit LEFT JOIN -> OK, aber ich komm net weiter PHP-Fortgeschrittene 3 04.06.2004 00:37

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
left join leere, left join dauert ewig, left join id, join dauert ewig, join dauert zu lange, left join problem, sql left join, sql left join funktioniert nicht, left join geht nicht php, sql touren, join problem mit leeren tabellen, mysql join leere einträge, php \left join\ geht nicht, mysql left join leere felder, php leftstr, left join dauert lange, sql left string, left join fehler, http://www.php.de/datenbanken/19934-erledigt-left-join-problem.html, mysql join dauert zu lange

Alle Zeitangaben in WEZ +2. Es ist jetzt 06:33 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.