[GastForen Programmierung/Entwicklung PHP und MySQL Problem mit 2 Tabellen.

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Problem mit 2 Tabellen.

webgrauen
Beiträge gesamt: 20

17. Jul 2002, 14:51
Beitrag # 1 von 12
Bewertung:
(2818 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
In der ersten Tabelle habe ich eine Liste mit Beiträgen aus einem Forum. In der zweiten Tabelle habe ich nun die Antworten.Nun möchte ich die Antworten in Tabelle 2 gerne auszählen lassen. Es klappt auch, aber leider werden nur die Beiträge aus Tabelle 1 ausgezählt welche in Tabelle 2 Antworten stehen haben. Was läuft hier verkehrt ?
Ich habe alles probiert.

$read_messages="
SELECT
$message_table.message_id,
$message_table.topic,
$message_table.username,
$message_table.datetime,
$reply_table.message_id,
COUNT($reply_table.reply_id) AS hello
FROM $reply_table,$message_table WHERE $reply_table.message_id=$message_table.message_id
GROUP BY $message_table.message_id DESC LIMIT $HTTP_GET_VARS[anfang],$ende";

X

Problem mit 2 Tabellen.

Miro Dietiker
Beiträge gesamt: 699

17. Jul 2002, 23:59
Beitrag # 2 von 12
Beitrag ID: #7554
Bewertung:
(2818 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Halloo ,)

Mal ein Problem für fortgeschrittene Benutzer!

Ich hole mal etwas aus:

Beim Verbinden mehrerer Tabellen gibt es 2
Grundmöglichkeiten:

- SELECT .. FROM TabA,TabB WHERE TabA.ID=TabB.ID
Was passiert hier:
Es werden Nur resultate 'überleben' welche in der
TabelleA und TabelleB drin sind! Existiert zu einem
Beitrag in TabA keine Antwort in TabB wird die
Verknüpfung "TabA.ID=TabB.ID" NULL zurückgeben.
Solche Resultate fallen bei dieser Methode WEG.
Somit gibt es so keine Lösung.

- SELECT FROM TabA
LEFT JOIN TabB
ON TabB.ID=TabA.ID
Wir nehmen TabelleA als Basistabelle! Darauf hin
verknüpfen wir mit TabelleB. Das LEFT Join wird
aber auch Einträge in der TabelleA stehen lassen,
welche beim Verknüpfen von "ON TabB.ID=TabA.ID"
NULL zurückgeben. Dein Problem also behoben!

Die Gruppenbefehle normal anwenden, und den Count
auch normal ansetzen.

... *flick, bastel*, *WWWWÜÜÜÜÜÜÜRRRRRGGG* ...

FERTIG!!!

Greetz: Miro Dietiker


als Antwort auf: [#7491]

Problem mit 2 Tabellen.

Miro Dietiker
Beiträge gesamt: 699

18. Jul 2002, 00:01
Beitrag # 3 von 12
Beitrag ID: #7556
Bewertung:
(2818 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Achja ...

Dein Befehl lautet nun etwa:

$read_messages="
SELECT
$message_table.message_id,
$message_table.topic,
$message_table.username,
$message_table.datetime,
$reply_table.message_id,
COUNT($reply_table.reply_id) AS hello
FROM $message_table
LEFT JOIN $reply_table
ON $reply_table.message_id=$message_table.message_id
GROUP BY $message_table.message_id DESC
LIMIT $HTTP_GET_VARS[anfang],$ende";

Ich denk das müsste etwa laufen

CU then! MDi


als Antwort auf: [#7491]

Problem mit 2 Tabellen.

webgrauen
Beiträge gesamt: 20

18. Jul 2002, 07:59
Beitrag # 4 von 12
Beitrag ID: #7565
Bewertung:
(2818 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke sehr.Klappt noch nicht wirklich aber ich bekomme es hin.

LEFT JOIN $reply_table###(Links besuchen Antworten Tabelle)
Hmmmm...
Was ist RIGHT JOIN ?
Was ist Left JOIN ?

Das hört sich jetzt bestimmt dämlich an, aber...
Ich als Trottel und Laie stelle mir das jetzt einfach mal
so vor.Der kürzere Weg ist der Beste Weg und weil die
ID der Antworten in der Antworten Tabelle weiter links statt rechts steht soll ich RIGHT JOIN benutzen.
Ich bin wohl noch nicht ganz mit lernen fertig hmmmm ?




als Antwort auf: [#7491]

Problem mit 2 Tabellen.

webgrauen
Beiträge gesamt: 20

18. Jul 2002, 08:43
Beitrag # 5 von 12
Beitrag ID: #7569
Bewertung:
(2818 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hier habe ich mal die Tabellenstruktur für beide Tabellen kopiert.
Ist vieleicht einfacher mir zu helfen.Ich schaffe es wohl doch noch nist.
Ich bekomme nur die IDS der Nachrichten der Nachrichtentabelle wenn
auch Antworten in der Antworttabelle enthalten sind korrekt angezeigt.
Aber immerhin schon etwas :) Danke.
Ich habe auch einen kleinen Schnappschuss mit Paintshop gemacht.



# Tabellenstruktur für Tabelle `forum_2`
# Das ist das message_table

CREATE TABLE forum_2 (
message_id int(10) unsigned NOT NULL auto_increment,
email varchar(40) default NULL,
username varchar(25) default NULL,
topic varchar(25) default NULL,
message text,
datetime varchar(18) default NULL,
reply_message_counter int(11) default NULL,
view_counter int(11) default NULL,
PRIMARY KEY (message_id)
) TYPE=MyISAM;

# Tabellenstruktur für Tabelle `forum_3`

CREATE TABLE forum_3 (
reply_id int(10) unsigned NOT NULL auto_increment,
message_id int(11) default NULL,
reply_email varchar(40) default NULL,
reply_username varchar(25) default NULL,
reply_message text,
datetime varchar(18) default NULL,
PRIMARY KEY (reply_id)
) TYPE=MyISAM;

##################################################
#Und hier der Query den ich im Augenblick benutze.
#

$read_messages="
SELECT
$message_table.message_id,
$message_table.topic,
$message_table.username,
$message_table.datetime,
$message_table.view_counter,
$reply_table.message_id,
COUNT($reply_table.reply_id) AS hello
FROM $message_table
LEFT JOIN $reply_table ON $reply_table.message_id=$message_table.message_id
GROUP BY $message_table.message_id DESC LIMIT $HTTP_GET_VARS[anfang],$ende";


als Antwort auf: [#7491]

Problem mit 2 Tabellen.

Miro Dietiker
Beiträge gesamt: 699

19. Jul 2002, 10:06
Beitrag # 6 von 12
Beitrag ID: #7652
Bewertung:
(2818 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Morgen!

Ich habe soeben die Tabellen in meine DB reingemacht,
und den SQL-Befehl sauber von Hand geschrieben:

SELECT *, COUNT(forum_3.message_id) AS counter
FROM forum_2
LEFT JOIN forum_3 ON forum_3.message_id=forum_2.message_id
GROUP BY forum_2.message_id

Nun ... läuft alles!

Es werden mir alle Beiträge angezeigt
(auch die ohne antwort!!)

Was der unterschied zwischen den beiden "Verbindungsarten"
zwischen Tabellen ist, habe ich oben versucht zu schreiben.
Die 2 Varianten LEFT JOIN und RIGHT JOIN haben nichts mit
der Anordnung der Spalten zu tun! Vielmehr geht es um die
Hierarchische Struktur der Verbindungen (Mit den Joins
definiert man Verbindungen wie man sie im ACCESS bsp. mit
der Maus ziehen kann!)
Dazu müsstest du aber etwas tiefer über dieses Thema
nachlesen.

Im allgemeinen genügt:
Die Basistabelle (Von wo aus du verbinden willst) im
SELECT als erste Tabelle aufführen und dann mit LEFT JOIN
zu weiteren Tabellen verbinden

Viel Spass!

GR: MDi


als Antwort auf: [#7491]

Problem mit 2 Tabellen.

webgrauen
Beiträge gesamt: 20

19. Jul 2002, 10:47
Beitrag # 7 von 12
Beitrag ID: #7657
Bewertung:
(2818 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Im PHPMyadmin bekomme ich alles korrekt angezeigt. Aber auf der Seite wo ich die Beiträge auslese klappt es leider immer noch nicht. Die ID´s der Beiträge die keine Antwortnachrichten enthalten bekomme ich aber nicht *lol*
Siehe Foto.
Somit kann ich auch nicht diese Beiträge auf der nächsten Seite auslesen.



als Antwort auf: [#7491]

Problem mit 2 Tabellen.

Miro Dietiker
Beiträge gesamt: 699

22. Jul 2002, 00:13
Beitrag # 8 von 12
Beitrag ID: #7783
Bewertung:
(2818 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
"In phpMyAdmin wird alles korrekt..."
-> Genau wie ich mitgeteilt habe, hatte ich dies ebenfalls
getestet und es funktionierte. Einwandfrei! Incl. den
Einträgen Ohne Antwort!

Hast du nun ein Problem, dass Du in Deinem PHP-Script
NICHT das gleiche erhältst wie in phpMyAdmin, so liegt das
Wohl oder Übel an einem Programmierfehler in der Daten-
bankanbindung und nichts anderes..

Probier's doch auf eine andere Möglichkeit mit dem Auslesen
nochmals .))

Oder benötigst du gleich ein komplett ausgearbeitetes
PHP und mySQL-Beispiel?

Miro Dietiker


als Antwort auf: [#7491]

Problem mit 2 Tabellen.

webgrauen
Beiträge gesamt: 20

22. Jul 2002, 07:37
Beitrag # 9 von 12
Beitrag ID: #7789
Bewertung:
(2818 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ist schon o.k. es hat geklappt.
Es haben sich scheinbar nur die Fehler eingeschlichen weil... Ich habe keine Ahnung. Jedenfalls habe ich heute morgen den Server neu gestartet und es läuft alles.

Vielen Dank für die Hilfe.


als Antwort auf: [#7491]

Problem mit 2 Tabellen.

Klaus aus MG
Beiträge gesamt: 121

26. Apr 2005, 20:19
Beitrag # 10 von 12
Beitrag ID: #162362
Bewertung:
(2818 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Abend
>Beim Verbinden mehrerer Tabellen gibt es 2
Grundmöglichkeiten:

- SELECT .. FROM TabA,TabB WHERE TabA.ID=TabB.ID
<
Die Lösung oben gefällt mir gut, genau das habe ich gesucht - aber wie stelle ich das mit mehr als 2 Tabellen an ?

Danke und Grüße aus MG

Klaus aus MG


als Antwort auf: [#7491]

Problem mit 2 Tabellen.

oesi50
  
Beiträge gesamt: 2315

26. Apr 2005, 20:32
Beitrag # 11 von 12
Beitrag ID: #162363
Bewertung:
(2818 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
SELECT .. FROM TabA,TabB,TabC
WHERE TabA.ID_fk = TabB.ID_pk
AND TabB.ID_fk = TabC.ID_pk

usw.

Grüße Oesi
Ich weiß, dass ich nichts weiß... (Sokrates)


als Antwort auf: [#7491]

Problem mit 2 Tabellen.

Klaus aus MG
Beiträge gesamt: 121

26. Apr 2005, 21:10
Beitrag # 12 von 12
Beitrag ID: #162369
Bewertung:
(2818 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo und Danke oesi50
okay ich gebe zu - hätte man auch selberdrauf kommebn können !


Klaus aus MG


als Antwort auf: [#7491]
X