• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

SELECT Abfrage

lokoroko

Mitglied
Hallo,

ich beschäftige mich gerade mit einer SELECT-Abfrage bei der ich ein wenig durcheinander komme. Und zwar möchte ich auf einer Seite Bilder auslesen die meine Freunde hochgeladen haben und meine eigenen.

Jetzt gibt es dabei drei Datenbank-Tabellen die eine Rolle spielen:
abonennten: In dieser Tabelle finden sich zwei spalten und zwar iduser und followed. Letztendlich wird in dieser Tabelle gespeichert wer mit wem befreundet ist

bildtabelle: In dieser Tabelle werden sämtliche Bilder abgespeichert die von jedem User hochgeladen wurden

adressen: Hier sind die Account-Informationen der einzelnen User abgespeichert

Ich schaffe es alle Bilder auszulesen von den Freunden eines Users. Was nicht gelingt ist das zusätzlich zu denen auch noch die Bilder des Users ausgelesen werden der gerade angemeldet ist. Ich komme dabei durcheinander und frage mich ob das in der Art und Weise wie ich mir das denke überhaupt möglich ist.

Das hier ist meine Abfrage:

Code:
$sql = "SELECT bildtabelle.path, adressen.benutzername, adressen.vorname, adressen.profilbild, bildtabelle.timestamp, adressen.id FROM `bildtabelle`, `adressen`, `abonennten` WHERE adressen.id = bildtabelle.user_id AND bildtabelle.user_id = abonennten.followed AND abonennten.iduser = '$userid' ORDER BY timestamp DESC LIMIT $start, $count2";

Ich weiß nicht ob für euch ersichtlich ist wie meine Datenbank aufgebaut sind aber an sich ist das nicht so wichtig. Mein Hauptproblem liegt nämlich darin das ich durch AND nur weiter eingrenze welche Bilder mir anheizt werden sollen. Dadurch funktioniert das ganze nicht so wie ich mir das wünsche.

Vom Prinzip her stelle ich mir sowas vor auch wenn das so nicht funktioniert:

Code:
$sql = "SELECT bildtabelle.path WHERE bildtabelle.user_id = '$userid' AND bildtabelle.path, adressen.benutzername, adressen.vorname, adressen.profilbild, bildtabelle.timestamp, adressen.id FROM `bildtabelle`, `adressen`, `abonennten` WHERE adressen.id = bildtabelle.user_id AND bildtabelle.user_id = abonennten.followed AND abonennten.iduser = '$userid' ORDER BY timestamp DESC LIMIT $start, $count2";

Weiß einer von euch ob das so in der Art möglich wäre ? PS: $userid ist die ID des angemeldeten Users
 
Werbung:
Hallo,

ich beschäftige mich gerade mit einer SELECT-Abfrage bei der ich ein wenig durcheinander komme. Und zwar möchte ich auf einer Seite Bilder auslesen die meine Freunde hochgeladen haben und meine eigenen.

Jetzt gibt es dabei drei Datenbank-Tabellen die eine Rolle spielen:
abonennten: In dieser Tabelle finden sich zwei spalten und zwar iduser und followed. Letztendlich wird in dieser Tabelle gespeichert wer mit wem befreundet ist

bildtabelle: In dieser Tabelle werden sämtliche Bilder abgespeichert die von jedem User hochgeladen wurden

adressen: Hier sind die Account-Informationen der einzelnen User abgespeichert

Ich schaffe es alle Bilder auszulesen von den Freunden eines Users. Was nicht gelingt ist das zusätzlich zu denen auch noch die Bilder des Users ausgelesen werden der gerade angemeldet ist. Ich komme dabei durcheinander und frage mich ob das in der Art und Weise wie ich mir das denke überhaupt möglich ist.

Das hier ist meine Abfrage:

Code:
$sql = "SELECT bildtabelle.path, adressen.benutzername, adressen.vorname, adressen.profilbild, bildtabelle.timestamp, adressen.id FROM `bildtabelle`, `adressen`, `abonennten` WHERE adressen.id = bildtabelle.user_id AND bildtabelle.user_id = abonennten.followed AND abonennten.iduser = '$userid' ORDER BY timestamp DESC LIMIT $start, $count2";

Ich weiß nicht ob für euch ersichtlich ist wie meine Datenbank aufgebaut sind aber an sich ist das nicht so wichtig. Mein Hauptproblem liegt nämlich darin das ich durch AND nur weiter eingrenze welche Bilder mir anheizt werden sollen. Dadurch funktioniert das ganze nicht so wie ich mir das wünsche.

Vom Prinzip her stelle ich mir sowas vor auch wenn das so nicht funktioniert:

Code:
$sql = "SELECT bildtabelle.path WHERE bildtabelle.user_id = '$userid' AND bildtabelle.path, adressen.benutzername, adressen.vorname, adressen.profilbild, bildtabelle.timestamp, adressen.id FROM `bildtabelle`, `adressen`, `abonennten` WHERE adressen.id = bildtabelle.user_id AND bildtabelle.user_id = abonennten.followed AND abonennten.iduser = '$userid' ORDER BY timestamp DESC LIMIT $start, $count2";

Weiß einer von euch ob das so in der Art möglich wäre ? PS: $userid ist die ID des angemeldeten Users

Code:
-- Create syntax for TABLE 'images'
CREATE TABLE `images` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `path` varchar(255) DEFAULT NULL,
  `userid` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

-- Create syntax for TABLE 'subscribers'
CREATE TABLE `subscribers` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `subscriberid` int(11) DEFAULT NULL,
  `userid` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

-- Create syntax for TABLE 'users'
CREATE TABLE `users` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

Code:
SELECT
    i.path
FROM images AS i
LEFT JOIN users AS u ON (u.id = i.userid)
LEFT JOIN subscribers AS s ON (s.userid = i.userid)
WHERE u.id = 2 OR s.subscriberid = 2;

Habs jetzt nicht wirklich getestet aber müsste funktionieren.
 
Werbung:
Also es scheint alles so zu funktionieren wie ich mir das vorgestellt habe. Muss das ganze jetzt noch weiter austesten aber sieht gut aus !!!

Vielen Dank :DD
 
Zurück
Oben