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 13-01-2009, 01:33
Truncate
 Registrierter Benutzer
Links : Onlinestatus : Truncate ist offline
Registriert seit: Nov 2005
Beiträge: 414
Truncate kann nur auf Besserung hoffen
Standard Aufbau Twitter / Mikroblog / Facebook

Hallo,

ich möchte sowas in der Art wie Twitter entwickeln (ein sog. Mikroblog).

An sich nicht weiter schwer, es soll aber erweitere Features haben wie z.B. bei Facebook wo man auf Postings antworten kann.

Für Unwissende: Eine Art Gästebuch wo man auf Einträge eben antworten kann (fast wie ein Miniforum).

Neben jedem Eintrag soll aber auch gleich stehen, wieviele Antworten bereits vorhanden sind (ev. sollte man es auch so abfragen können, dass auch neue Antworten in alten Beiträgen "oben" mit erscheinen).

Idee 1 (2 Tabellen):

Tabelle "postings":

- threadID
- userID
- beitrag
- zeit

Tabelle "antworten":

- antwortID
- threadID
- userID
- beitrag
- zeit

Hier müßte man also mit Joins & Co. arbeiten.

Idee 2 (1 Tabelle):

- threadID
- antwortID
- userID
- beitrag
- zeit

antwortID wird nur befüllt wenn es sich um eine Antwort handelt. Weiß aber nicht inwiefern das alles dann zu unflexibel wird.

Hat jemand Ideen was die sinnvollste Lösung für diese Anwendung wäre?

Danke,
Truncate

Geändert von Truncate (13-01-2009 um 15:30 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 13-01-2009, 09:51
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

Alles in eine Tabelle.
Posting ist Posting, ob es eine Antwort ist ist nur eine Eigenschaft.
Mit Zitat antworten
  #3 (permalink)  
Alt 13-01-2009, 14:26
Truncate
 Registrierter Benutzer
Links : Onlinestatus : Truncate ist offline
Registriert seit: Nov 2005
Beiträge: 414
Truncate kann nur auf Besserung hoffen
Standard

Echt? Also ich kann dann auch wie gewünscht die Anzahl der Antworten neben den Postings in einer (!) Abfrage mit anzeigen lassen?

Ich hatte wegen dem Aufbau eines Forum hier glaub auch schon mal gefragt und da wurde "auf jeden Fall einzelne Tabellen" gesagt. Hm...
Mit Zitat antworten
  #4 (permalink)  
Alt 13-01-2009, 15:26
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Posting und Antwort ist aber was anderes wie Thread und Posting.
Mit Zitat antworten
  #5 (permalink)  
Alt 13-01-2009, 15:36
Truncate
 Registrierter Benutzer
Links : Onlinestatus : Truncate ist offline
Registriert seit: Nov 2005
Beiträge: 414
Truncate kann nur auf Besserung hoffen
Standard

Ich glaub langsam es geht doch nicht alles in einer Tabelle:

- eintragID
- antwortID (mit Bezug auf eintragID)
- username
- beitrag
- zeit

eintragID ist ja sicherlich INT und fortlaufend...

Auflistung aller Einträge (ohne Antworten) erfolgt also z.B. mittels:

SELECT * FROM tab WHERE antwortID=''

Wie soll jetzt z.B. eine Antwort auf eintragID 100 gespeichert werden?

fortlaufende id|100|hans|ja stimmt...|zeit ?

Die Antwort hat also dann gleichzeitig eine eigene ID durch eintragID?

Und wie listet man jetzt alle Einträge OHNE Antworten auf, schreibt aber hinter jeden Eintrag wieviele Antworten es schon gibt?

Meine das in etwa so:

hans: bla llalalalalal - 0 antworten
dieter: bla llalalalalal - 1 antworte
peter: bla llalalalalal - 0 antworten
jochen: bla llalalalalal - 3 antworten
Mit Zitat antworten
  #6 (permalink)  
Alt 13-01-2009, 16:56
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

SELECT a.*, COUNT(b.antwort_id) as cnt FROM tabelle a LEFT JOIN tabelle b ON a.eintrag_id = b.antwort_id WHERE a.eintrag_id = 0 GROUP BY (a.eintrag_id)
Mit Zitat antworten
  #7 (permalink)  
Alt 13-01-2009, 17:01
Truncate
 Registrierter Benutzer
Links : Onlinestatus : Truncate ist offline
Registriert seit: Nov 2005
Beiträge: 414
Truncate kann nur auf Besserung hoffen
Standard

Zitat:
Original geschrieben von ghostgambler
SELECT a.*, COUNT(b.antwort_id) as cnt FROM tabelle a LEFT JOIN tabelle b ON a.eintrag_id = b.antwort_id WHERE a.eintrag_id = 0 GROUP BY (a.eintrag_id)
Das ist jetzt aber die Lösung bei Verwendung von 2 Tabellen oder?
Mit Zitat antworten
  #8 (permalink)  
Alt 13-01-2009, 17:35
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

Nein. Es wird zwei Mal die gleiche Tabelle referenziert.
Mit Zitat antworten
  #9 (permalink)  
Alt 13-01-2009, 17:54
Truncate
 Registrierter Benutzer
Links : Onlinestatus : Truncate ist offline
Registriert seit: Nov 2005
Beiträge: 414
Truncate kann nur auf Besserung hoffen
Standard

Hm das liefert bei mir immer 0 Ergebnisse.

Tabelle "msg":

id
antwortid
...

Code:
SELECT

a.*, COUNT(b.antwortid) AS cnt

FROM

msg a

LEFT JOIN

msg b ON a.id = b.antwortid

WHERE

a.id = 0

GROUP BY (a.id)
Mit Zitat antworten
  #10 (permalink)  
Alt 13-01-2009, 18:32
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

Wie ist deine Tabellenstruktur, was sind die eingetragenen Daten?
(Am besten ein SQL-Dump, bevor du anfängst irgendwas zu tippen.)
Mit Zitat antworten
  #11 (permalink)  
Alt 13-01-2009, 18:56
Truncate
 Registrierter Benutzer
Links : Onlinestatus : Truncate ist offline
Registriert seit: Nov 2005
Beiträge: 414
Truncate kann nur auf Besserung hoffen
Standard

Code:
-- 
-- Tabellenstruktur für Tabelle `msg`
-- 

CREATE TABLE `msg` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `antwortid` int(10) unsigned NOT NULL,
  `userid` smallint(5) unsigned NOT NULL,
  `inhalt` text collate latin1_general_ci NOT NULL,
  `zeit` datetime NOT NULL,
  `public` enum('ja','nein') collate latin1_general_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=4 ;

-- 
-- Daten für Tabelle `msg`
-- 

INSERT INTO `msg` (`id`, `antwortid`, `userid`, `inhalt`, `zeit`, `public`) VALUES 
(1, 0, 1, 'heute ist ein schöner tag', '2009-01-13 15:57:11', 'ja'),
(2, 0, 2, 'mir ist kalt', '2009-01-13 15:57:34', 'ja'),
(3, 1, 1, 'wo sind meine socken', '2009-01-13 15:57:57', 'ja');
Bei der Ausgabe müßte also id 1 + 2 aufgelistet werden und bei id 1 eben "1 Antwort" oder sowas.

Abfragen tu ich im Moment so:

Code:
SELECT 

*,
TIME_FORMAT(zeit,'%H:%i') AS termin,
stammdaten.username AS username

FROM

msg

LEFT JOIN

stammdaten ON msg.userid=stammdaten.userid 

WHERE

antwortid=0

AND

public='ja'

ORDER BY zeit

DESC LIMIT 25
Die Abfrage holt noch zur Userid den Usernamen.

Die Antworten muss ich derzeit noch in einer Schleife holen:

Code:
SELECT

COUNT(antwortid)

FROM

msg

WHERE

antwortid='".$row['id']."'

LIMIT 1

Geändert von Truncate (13-01-2009 um 18:59 Uhr)
Mit Zitat antworten
  #12 (permalink)  
Alt 13-01-2009, 21:19
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

Ich hab gerüchteweise gehört, dass es Sinn macht zu verstehen was man kopiert.

So funktioniert es wie gewünscht:
SELECT a.*, COUNT(b.antwortid) AS cnt
FROM msg a LEFT JOIN msg b ON a.id = b.antwortid
WHERE a.antwortid = 0
GROUP BY (a.id)
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 21:11 Uhr.