php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 29-01-2009, 17:37
norodon
 Registrierter Benutzer
Links : Onlinestatus : norodon ist offline
Registriert seit: Apr 2008
Beiträge: 55
norodon ist zur Zeit noch ein unbeschriebenes Blatt
Standard Denkanstoß gesucht für DB Zugriff

N'abend,

ich habe folgende Problemstellung:
User können bei mir Beiträge schreiben. Man hat die möglichkeit andere zu "beobachten" bzw. "abonnieren". Sprich man kann sich die BEiträge der beobachteten Person anzeigen lassen.

Ganz grobe Datenbankstruktur:

Entry Table:
id author_id text creation_date

Watch Table:
id watch_id (den man beobachtet) eigene_id


Ich möchte dem User nun ermöglichen die letzten Einträge seiner abonnierten Beiträge anzusehen und von jedem User den man beobachtet immer nur den aktuellsten Eintrag. Natürlich mit 1 Query. Sonst wärs ja einfach

Klar fallen mir dafür lösungen ein, aber die sind nicht sehr elegant. Jemand nen Denkanstoß für mich?

Gruß
Noro

Geändert von norodon (29-01-2009 um 17:43 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 29-01-2009, 17:59
asp2php
 Banned
Links : Onlinestatus : asp2php ist offline
Registriert seit: Feb 2004
Beiträge: 11.745
asp2php ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ja, JOIN ist dein Freund.
Mit Zitat antworten
  #3 (permalink)  
Alt 29-01-2009, 18:38
norodon
 Registrierter Benutzer
Links : Onlinestatus : norodon ist offline
Registriert seit: Apr 2008
Beiträge: 55
norodon ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Nein, glaube das alleine hilft da nicht.

Ich beschreib es mal Detaiierter:


User A hat folgende Einträge:

Eintrag 1: Hallo
Eintrag 2: Bin Zuhause (nach Eintrag 1 erstellt)


User B hat folgende Einträge:

Eintrag 1: Bin neu hier.



Beide habe ich Abonniert und sehe nun auf meiner Home-Seite:

User A: Bin Zuhause
User B: Bin neu hier


Wüsste nicht wie Join allein mir da hilft... bin aber auch nicht so wissend in Datenbanken.
Mit Zitat antworten
  #4 (permalink)  
Alt 29-01-2009, 20:06
asp2php
 Banned
Links : Onlinestatus : asp2php ist offline
Registriert seit: Feb 2004
Beiträge: 11.745
asp2php ist zur Zeit noch ein unbeschriebenes Blatt
Standard

und wie hast du versucht, dass du zu dem Erkenntnis kommst?
Mit Zitat antworten
  #5 (permalink)  
Alt 30-01-2009, 02:19
norodon
 Registrierter Benutzer
Links : Onlinestatus : norodon ist offline
Registriert seit: Apr 2008
Beiträge: 55
norodon ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Die IDee die ich dazu hatte ist sehr umständlich. Einzelenes Auslesen von Datenbankeinträgen und danach zusammensetzen und ausgeben.

Alleridngs will ich da kein "Konstrukt" haben, sondern was elegantes. Über joins fällt mir nur das Einlesen z.B. der Usernames ein, wenn ich die User_ID habe.
Mit Zitat antworten
  #6 (permalink)  
Alt 30-01-2009, 07:47
asp2php
 Banned
Links : Onlinestatus : asp2php ist offline
Registriert seit: Feb 2004
Beiträge: 11.745
asp2php ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Wenn du überhaupt keinen Versuch startet und zeigst, dass du Interesse daran hast, selbst was zu machen, kann/will keiner dir helfen.
Mit Zitat antworten
  #7 (permalink)  
Alt 30-01-2009, 10:17
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Lies doch einfach mal den sticky Thread zu Joins und arbeite das Beispiel durch...
Mit Zitat antworten
  #8 (permalink)  
Alt 30-01-2009, 14:16
norodon
 Registrierter Benutzer
Links : Onlinestatus : norodon ist offline
Registriert seit: Apr 2008
Beiträge: 55
norodon ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Den kannte ich schon. Bis heute morgen habe ich jedoch einfach keinen Zusammenhang zwischen Join und meinem Problem gesehen.

Meine Idee zur Zeit ist:

SELECT comment.text, comment.user_id
FROM comment
JOIN abo ON comment.user_id = abo.abo_id
WHERE abo.User_id = 5


Soweit, sogut, alle User die ich aboniert habe werden auch ausgegeben. Die Frage wäre nun wie gebe ich die aktuellsten einträge eines Users aus?

Würde ich den neusten Eintrag eines users haben wollen würde ich folgendes tun:

SELECT *
FROM comment
ORDER BY creation_data DESC
LIMIT 1

Welche Möglichkeiten habe ich, dass mit der obigen Abfrage zu kombinieren?
Mit Zitat antworten
  #9 (permalink)  
Alt 30-01-2009, 14:29
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Subselect
(nein besser geht es leider (noch) nicht)
Mit Zitat antworten
  #10 (permalink)  
Alt 30-01-2009, 14:33
norodon
 Registrierter Benutzer
Links : Onlinestatus : norodon ist offline
Registriert seit: Apr 2008
Beiträge: 55
norodon ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich glaub ich habs:


SELECT comment.text, comment.user_id,max(stamp)
FROM comment
JOIN abo ON comment.user_id = abo.abo_id
WHERE abo.User_id = 5
GROUP BY user_Id


Zumindest funktioniert es.... optimierungen? ^^ Bin bei Joins immer am überlegen welche die effizienteste methode ist.

Aber subselects sind natürlich auch ne möglichkeit...


EDIT: Arghs wohl zu früh gefreut... muss ich wohl doch die SUbselects nehmen

Geändert von norodon (30-01-2009 um 14:37 Uhr)
Mit Zitat antworten
  #11 (permalink)  
Alt 01-02-2009, 06:03
norodon
 Registrierter Benutzer
Links : Onlinestatus : norodon ist offline
Registriert seit: Apr 2008
Beiträge: 55
norodon ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Also ich habe jetzt einige Zeit rummprobiert heute nacht.

Ich habe überlegt ich könnte das SubSelect als FROM argument übergeben. Und innerhalb des SubSelect mache ich einen JOIN um nur alle relevanten inhalte auszulesen.

Was mir jetzt aber noch fehlt ist, wie ich wirklich nur die letzten Einträge eines Users auslesen kann.

Jeden User innerhalb eines weiteren SubSelects einzeln auslesen? und nur die aktuellsten übergeben?
Mit Zitat antworten
  #12 (permalink)  
Alt 01-02-2009, 09:03
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard Re: Denkanstoß gesucht für DB Zugriff

SELECT * FROM entry WHERE author_id IN (SELECT MAX(watch.id) FROM watch INNER JOIN entry ON watch_id = author_id WHERE eigene_id = $id GROUP BY watch_id);

vielleicht ist auch ein

SELECT a.* FROM entry a INNER JOIN (SELECT MAX(watch.id) cnt FROM watch INNER JOIN entry ON watch_id = author_id WHERE eigene_id = $id GROUP BY watch_id) b ON a.id = b.cnt;

schneller (sofern das in der Form geht) ... das ist bei Subselects immer etwas mit Glück behaftet...
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 04:54 Uhr.