PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   MySQLi/PDO/(MySQL) (http://www.selfphp.de/forum/forumdisplay.php?f=22)
-   -   Eine Tabelle mit 10 IDs verweist auf eine Tabelle (http://www.selfphp.de/forum/showthread.php?t=22703)

Gileeser 17.01.2010 15:16:54

Eine Tabelle mit 10 IDs verweist auf eine Tabelle
 
Guten Tag!

Ich habe eine MySQL-Tabelle 'testen', die stellt bis zu 10 IDs wie 'ID_besch1', 'ID_besch2' .... 'ID_besch10'
zu entsprechenden Bilder aus, also 10 Spalten, welche die gewünschte Bildnummer von einer Auswahl aus ca. 100 Bildern enthält.
Der Text zu den Bildern steht in der Tabelle 'beschbg' mit 2 Spalten: 'Idtext' und 'btext'.

Die Bilder selbst spielen bei dieser Betrachtung keine Rolle,
diese werden über eine Id mit <img> von Smarty angezeigt.

Die Tabelle 'testen' hat noch mehrere Spalten wie 'name' ... und noch 2 Ids zu den Tabellen 'plz' und 'ort.
'plz' Spalten: Idpost und PLZ, 'ort' Spalten: IdOrt und Ort.

Gesucht wird der Text von 'btext', bis zu 10 Texte in der Reihenfolge der IDS des Datensatzes in 'testen'.

Tabelle 'testen' Spaltenauszug
Code:

ID_besch1        ID_besch2        ID_besch3        .....        ID_besch10
3                7                34                        57
2                1                9                        6

Beschreibung zum Bild
Code:

Idtext                btext
1                Haus.....
2                Garten ...
3                Ziegel ....
.......
99                Hecke.....

Hier kommen die Daten her:
PHP-Code:

 if($rows>0)
    {     
$p = array();
        
$table = array();
         while(
$row mysql_fetch_array($result))
.............
        
$tpl->assign"tab",$table);
        
$tpl->display("ausg.tpl");
//Ende 

Abfragebeispiel:
$query = "SELECT * FROM testen
LEFT JOIN plz ON testen.ID_PLZ = plz.Idpost
LEFT JOIN ort ON testen.ID_Ort = ort.IdOrt
LEFT JOIN beschbg ON testen.ID_besch3 = beschbg.Idtext /* funkzuniert mit Zahl 1 bis 10 */
LEFT JOIN beschbg ON testen.ID_besch7 = beschbg.Idtext /* Der 2. Eintrag erzeugt einen DB-Fehler Query was empty*/
WHERE plz.PLZ $pp
ORDER by plz.PLZ
LIMIT 30";
return $query;

Die Abfrage funktioniert aber nur mit einer 'ID_besch1', gleich welche Ziffer von 10.
Ich habe sehr v i e l gelesen, gesucht und natürlich getestet, aber alles ohne Erfolgt.
Sicherlicht weiß irgend Jemand den Weg wie es gebaut werden kann!

Vielen Dank für Eure Hilfe
Kuddel

vt1816 17.01.2010 17:53:47

AW: Eine Tabelle mit 10 IDs verweist auf eine Tabelle
 
Hallo und willkommen in Deinem Alter hier im Forum ...


Die Strukturen der Tabellen wären mal von Interesse. Wie lautet/lauten die konkreten Fehlermeldung(en)?

Zitat:

$query = "SELECT * FROM testen
LEFT JOIN plz ON testen.ID_PLZ = plz.Idpost
LEFT JOIN ort ON testen.ID_Ort = ort.IdOrt
LEFT JOIN beschbg ON testen.ID_besch3 = beschbg.Idtext /* funkzuniert mit Zahl 1 bis 10 */
LEFT JOIN beschbg ON testen.ID_besch7 = beschbg.Idtext /* Der 2. Eintrag erzeugt einen DB-Fehler Query was empty*/
WHERE plz.PLZ $pp
ORDER by plz.PLZ
LIMIT 30";
Gehe mal davon aus, dass es sich hier nur um einen Schreibfehler handelt. Wieso benutzt Du LIMIT 30 wenn Du nur "bis zu 10 Texte" erhalten möchtest?

Gileeser 17.01.2010 20:41:05

AW: Eine Tabelle mit 10 IDs verweist auf eine Tabelle
 
Danke für die Antwort vt1816

Die Struckturen der Tabelle geht eigendlich aus meiner Anfrage hervor.
Tab. 'testen' hat normale Spalten wie name, strasse usw. weiter die ID zur Tab. 'plz', die ID zur Tab. 'ort' und nun kommen noch 10 IDs zur Tab. 'beschgb'.

Die Tabelle 'beschbg' hat ca. 100 Einträge ID und Text also 2 Spalten, Idtext btext.
Jeder Datensatz aus der Tabelle 'testen' hat 10 Bilder die jeder einen ausgewählten Text aus der Tabelle 'beschbg' erhalten sollen.

Anders ausgedrückt: Die Tabelle 'testen' hat 10 Verweise auf die Tabelle 'beschbg'.

So, für heute ist es genug, wenn es nicht reicht schreibe mir.

Schöne Grüße
Kuddel

vt1816 17.01.2010 21:19:07

AW: Eine Tabelle mit 10 IDs verweist auf eine Tabelle
 
Zitat:

Zitat von Gileeser (Beitrag 133834)
[...]
So, für heute ist es genug, ...

Für mich ist es immer wieder erstaunlich, dass Hilfesuchende in/mit ihrer Unwissenheit entscheiden was für den Helfenden notwendig ist und was nicht. Und das gestellte Fragen nur zum Teil bzw. gar nicht beantwortet werden.

Gileeser 18.01.2010 12:32:58

AW: Eine Tabelle mit 10 IDs verweist auf eine Tabelle
 
Liste der Anhänge anzeigen (Anzahl: 1)
O! O! vt1816
Ich wünsche Dir einen schönen Tag und natürlich den anderen Besuchern auch!!!

Schade das Du nicht durch die Zeilen lesen kannst!
Deine Begrüßung: Hallo und willkommen in Deinem Alter hier im Forum ...
Meine Verabschiedung: So, für heute ist es genug ...

Hier ist nun die Fortsetzung von gestern:
Fehlermeldung habe ich nur eine: Query was empty
Eine komplette Strucktur der DB findes Du im Bild strucktur.png
LIMIT 30 benutze ich weil es viel mehr als 30 Ausgaben geben kann.

Wieso benutzt Du LIMIT 30 wenn Du nur "bis zu 10 Texte" erhalten möchtest?
Deine Frage zeigt mir, dass meine Frage nicht richtig gestellt oder verstanden worden ist:

Die Tabelle 'testen' hat Spalten X,Y,Z, ID_PLZ, ID_Ort und
10 Spalten mit der ID_besch1 ... ID_besch10.
In der Tabelle habe ich die ID_beschx Spalten auf 5 reduziert!
In den ID_beschx Spalten steht als Wert je eine Zahl von 1 bis 99, also 10 Zahlen aus 99.

Die Tabelle 'beschbg' hat 2 Spalten Idtext und btext. Idtext hat einen Wert von 1 bis 99 und
btext hat einen Wert wie "Haus" oder "Garten" oder "Xxx".

ID_beschx steht also in Beziehung zu Idtex, also hat
ID_besch3 den Wert 12 und Idtext den Wert 12 soll die Ausgabe z.B. "Zaun" sein und
das natürlich dann mit bis zu 10 Ausgaben.
Beispiel:
Datensatz 25, Hans Meier, 12345 Testort, Gartenstr. 45, Haus, Garten, Zaun, Baum,
Weg, Steine, Ziegel, Zement, Fenster, Tür

Die Formatierung der Ausgabe wird mit Smarty gemacht.
Hinweis:
Die Zahl 99 kann auch 900 sein und die Texte sind ganze Sätze in der OriDB.

Ich bin gespannt ...

Viele Grüße
Kuddel

Ckaos 18.01.2010 13:22:02

AW: Eine Tabelle mit 10 IDs verweist auf eine Tabelle
 
Hi

doppeltes join auf eine tabelle ohne alias könnte zu dem fehler führen
Zitat:

Zitat von Gileeser (Beitrag 133821)
Guten Tag!
$query = "SELECT * FROM testen
LEFT JOIN plz ON testen.ID_PLZ = plz.Idpost
LEFT JOIN ort ON testen.ID_Ort = ort.IdOrt
LEFT JOIN beschbg ON testen.ID_besch3 = beschbg.Idtext /* funkzuniert mit Zahl 1 bis 10 */
LEFT JOIN beschbg ON testen.ID_besch7 = beschbg.Idtext /* Der 2. Eintrag erzeugt einen DB-Fehler Query was empty*/
WHERE plz.PLZ $pp
ORDER by plz.PLZ
LIMIT 30";
return $query;

versuch mal
Code:

SELECT * FROM  testen
LEFT JOIN  plz ON testen.ID_PLZ = plz.Idpost
LEFT JOIN  ort ON testen.ID_Ort = ort.IdOrt
LEFT JOIN beschbg as a ON testen.ID_besch3 = a.Idtext /* funkzuniert mit Zahl 1 bis 10 */
LEFT JOIN beschbg as b ON testen.ID_besch7 = b.Idtext  /* Der 2. Eintrag erzeugt einen DB-Fehler Query was empty*/
WHERE  plz.PLZ =$pp
ORDER by plz.PLZ
LIMIT 30

mfg

ckaos

Gileeser 18.01.2010 20:13:05

AW: Eine Tabelle mit 10 IDs verweist auf eine Tabelle
 
Hallo

Danke für Deine Mühe ckaos,

leider kommt bei 2 Verweisen auf eine Tabelle immer der Fehler.

Ich werde morgen mal eine ganze einfache DB nur mit PHP bauen.

Viele Dank für die Arbeit
Kuddel

Ckaos 18.01.2010 20:21:57

AW: Eine Tabelle mit 10 IDs verweist auf eine Tabelle
 
hi

ist denn ID_besch7 immer besetzt?
Wenn nicht mach nen subquery mit ner if abfrage
also so
Code:

SELECT *,
if(testen.ID_besch7>null,select btext from beschbg where idtext=testen.ID_besch7,"leer") as
ID_besch7_text
FROM  testen
LEFT JOIN  plz ON testen.ID_PLZ = plz.Idpost
LEFT JOIN  ort ON testen.ID_Ort = ort.IdOrt
LEFT JOIN beschbg as a ON testen.ID_besch3 = a.Idtext /* funkzuniert mit Zahl 1 bis 10 */
WHERE  plz.PLZ =$pp
ORDER by plz.PLZ
LIMIT 30

mfg

Ckaos


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:15:16 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.