Abfrage zweier Tabellen

dennis-sauer

Erfahrenes Mitglied
Hallo Leute,

ich steh total auf dem Schlauch und bekomm es einfach nicht hin.

Ich habe zwei Tabellen.

infochannels
infochannels_follow

Ich möchte auf einer Seite die Infokanäle anzeigen lassen mit einem Follow Button, wenn der Benutzer diesem schon folgt soll dort Unfollow erscheinen.

Ich bekomm die Abfrage einfach nicht hin. Das habe ich bisher:

PHP:
$sql="SELECT infochannels.*, infochannels_follow.* FROM infochannels, infochannels_follow WHERE infochannels_follow.user_id = '".$_SESSION["userid"]."' ";

In der Tabelle infochannels_follow gibt es nur zwei Felder:

- channel_id
- user_id

Aktuell folgt mein Benutzer 2 Infokanälen und nun wird jeder Infokanal zwei mal angezeigt.

Sorry, ich raffs grad echt nicht! Danke für jede Unterstützung!
 
Weil du den Tabellen nicht gesagt hast, wie sie sich joinen sollen wird einfach jeder Datensatz gejoint.
Effektiver ist diese Abfrage
PHP:
$sql  = "SELECT ic.*, icf.* FROM infochannels ic ";
$sql .= "LEFT JOIN infochannels_follow icf ON ic.channel_id=icf.channel_id AND ";
$sql .= sprintf("icf.user_id='%s';", $_SESSION["userid"] );

Damit taucht jeder Channel nur so häufig auf, wie er in der infochannels_follow Tabelle steht und Einträge für den User gibt.
Wenn ich jetzt kein Denkfehler drin habe tauchen auch die Channels auf, die der Nutzer noch nicht abonniert hat mit dem Unterschied, dass bei den Einträgen noch die user_id noch kein user_id haben.

Also ausgehend davon, dass deine User IDs Nummerisch und alle größer 0 sind.
Musst du dann nur Abfragen, ob die user_id >0 ist.
PHP:
if($ROW['user_id']>0) {
    $action = 'unfollow';
} else {
    $action = 'follow';
}

<--- Ausgabe für die Tabelle --->
echo sprintf("<a href='?action=%s' >%s</a>", $action, ucfirst($action));
<--- Weitere Ausgabe --->

Ich habe den Code hier nur frei so heraus geschrieben kann also sein, dass ich doch ein Denkfehler drin habe.
Besonders der 2. Code habe ich ja nur auf Annahmen gestützt und müsste deshalb nach erforderlichen Bedingungen angepasst werden.

Es müsste aber so in der Art funktionieren.

Schönen Freitag noch.
 
Hey, eine Frage hab ich noch, kann ich in deiner Abfrage noch ein COUNT integrieren, damit ich die Anzahl der folgenden Benutzer eines der Channels abfragen kann?
 
Du könntest noch eine Subquery im Definieren, die das realisiert.

PHP:
$sql  = "SELECT ic.*, icf.*, ";
$sql .= "(SELECT count(icf2.user_id) FROM infochannels_follow icf2 WHERE icf2.channel_id = ic.channel_id ) as count ";
$sql .= "FROM infochannels ic ";
$sql .= "LEFT JOIN infochannels_follow icf ON ic.channel_id=icf.channel_id AND ";
$sql .= sprintf("icf.user_id='%s';", $_SESSION["userid"] );

Dann könntest du immer das Feld count abfragen und somit die Anzahl die ausgeben lassen.
 

Neue Beiträge

Zurück