Wenn vorhanden, zwischengeschobenen Datensatz selektieren

Alt 01.03.2011, 21:15   # 1
thorr
 
Benutzerbild von thorr
 
Registriert seit: 22.11.2008
Beiträge: 40
Ich habe eine Tabelle mit Beiträgen, die jeweils einen Antwortbeitrag haben können, dessen Spalte entry_reply_to den Wert des dazugehörigen Eintrags enthält.

Beispiel: Es existiert ein Beitrag mit der ID 1. Der Antwortbeitrag hat die ID 3, die Spalte entry_reply_to enthält den Wert 1.

Nun möchte ich ohne PHP-Umwege für jeden Eintrag überprüfen, ob ein Antwortbeitrag vorhanden ist, und wenn dies der Fall ist, dann soll dieser zwischen den anderen Einträgen direkt ausgewählt und eingeschoben werden.

Ist das möglich und wenn ja, wie?
  Mit Zitat antworten
Alt 02.03.2011, 06:33   # 2
FreewareGuide
Moderator
 
Benutzerbild von FreewareGuide
 
Registriert seit: 31.10.2002
Ort: Oldenburg
Beiträge: 5.432
"ohne PHP-Umwege"? Nö, ohne Skriptsprache und SQL-Zugriff kann das nichts werden, nur HTML wird Dir da nicht helfen. Ich kann mir auch nicht vorstellen, dass Du das so meinst, aber so genau verstehe ich auch nicht, worauf Du hinaus willst.

Das Einzige, was ich vermuten könnte ist, dass Du die nötige SQL-Anfrage nicht hinbekommst, die Dir die Zeile(n) aus der Tabelle liefert, in denen die "entry_reply_to" die ID des Beitrages hat, oder? Was sollen wir jetzt erklären? MySQL SELECT?

Grüße,
Thorsten
  Mit Zitat antworten
Alt 02.03.2011, 08:52   # 3
thorr
Threadstarter
 
Benutzerbild von thorr
 
Registriert seit: 22.11.2008
Beiträge: 40
So in etwa, ja. Einfache SELECTs und JOINS etc. bekomme ich natürlich hin, aber ich möchte folgende Funktionsweise komplett in einen SQL-Befehl tranformieren.

PHP-Code:
$sql 'SELECT *
    FROM ' 
ENTRIES_TABLE ' e, ' USERS_TABLE ' u
    WHERE e.entry_reply_to = 0
        AND u.user_id = e.user_id
    ORDER BY e.entry_time DESC'
;
$result $db->sql_query($sql);

while (
$row $db->sql_fetchrow($result))
{
    
$sql 'SELECT *
        FROM ' 
ENTRIES_TABLE ' e, ' USERS_TABLE ' u
        WHERE e.entry_reply_to = ' 
$row['entry_id'] . '
            AND u.user_id = e.user_id
        ORDER BY entry_time ASC'
;
    
$temp $db->sql_query($sql);

    while (
$reply $db->sql_fetchrow($temp))
    {
        
// ...
    
}

  Mit Zitat antworten
Alt 02.03.2011, 08:53   # 4
Arthur Spooner
Halb Mensch, halb Admin
 
Benutzerbild von Arthur Spooner
 
Registriert seit: 10.05.2006
Beiträge: 3.899
Wenn ich deine Frage richtig verstanden habe, dann suchst du nach einer Abfrage, die ungefähr so aussieht:

SELECT ft.deine_felder_von_der_fragetabelle, at.deine_felder_von_der_antworttabelle FROM fragetabelle AS ft LEFT JOIN antworttabelle AS at ON (ft.fragetabelle_id = at.entry_reply_to)

Damit bekommst du alle Fragen ausgegeben und die dazugehörenden Antworten, wenn sie existieren. Wenn die Frage aber keine Antwort hat, dann bekommst du die Frage und NULL bei den Antwortfeldern.

Möchtest du allerdings nur Fragen anzeigen, die auch eine Antwort haben, dann musst du das LEFT JOIN gegen ein INNER JOIN austauschen.

Ich hoffe ich habe deine Frage richtig verstanden

Viele Grüße
  Mit Zitat antworten
Alt 08.03.2011, 19:09   # 5
thorr
Threadstarter
 
Benutzerbild von thorr
 
Registriert seit: 22.11.2008
Beiträge: 40
Leider nicht ganz - aber vielen Dank erst einmal für deine Antwort.

Generell möchte ich alle Einträge mit vernachlässigbaren WHERE-Bedingungen auswählen. Allerdings sollen diese so sortiert werden, dass auf einen Eintrag seine eventuell vorhandenen Antworteinträge (in derselben Tabelle!) folgen.

Code:
Eintrag 1 (Antwort auf 0)
Eintrag 2 (Antwort auf 0)
Eintrag 3 (Antwort auf 0)
  Eintrag 6 (Antwort auf 3)
  Eintrag 7 (Antwort auf 3)
Eintrag 4 (Antwort auf 0)
Eintrag 5 (Antwort auf 0)
  Eintrag 8 (Antwort auf 5)
Eintrag 9 (Antwort auf 0)
Die Angaben in Klammern werden ebenfalls so in der gleichen Tabelle gespeichert (entry_id, entry_reply_to).
  Mit Zitat antworten

Alt 28.05.2012, 21:08 # --
News Flash
 
Benutzerbild von News Flash
 
 
 
   
Antwort
Themen-Optionen



Alle Zeitangaben in WEZ +2. Es ist jetzt 21:08 Uhr.