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 25-08-2003, 20:43
tombstone7
 Newbie
Links : Onlinestatus : tombstone7 ist offline
Registriert seit: Apr 2003
Ort: Kölle
Beiträge: 16
tombstone7 ist zur Zeit noch ein unbeschriebenes Blatt
Question [SQL allgemein] Abfrage- Sortierung

Hi...

ich hoffe diese Abfrage lässt sich überhaupt realisieren und zwar...

habe ich ein Gästebuch, welches ich nun erweitern möchte um Kommentareinträge. Der Kommentareintrag soll (so angedacht) in der selben Tabelle erfolgen. Dafür ist das Attribut guestcommentID vorgesehen, der als Referenz auf guestID fungieren soll. Irgendwie muß man ja auch wissen, welcher Kommentar zu welchem EIntrag gehört. Das ganze soll halt so aussehen, daß die Abfrage die Einträge erst nach dem "Haupteintrag" sortiert und dann darauf die Kommentare folgen:

1.Eintrag
Kommentar
Kommentar

2. Eintrag

3. Eintrag
Kommentar
Kommentar



Hier die Tabelle zum besseren Verständniss:

CREATE TABLE guestbooktest (
guestID smallint(5) unsigned NOT NULL auto_increment,
guestdate date NOT NULL default '0000-00-00',
guesttext varchar(250) NOT NULL default '',
guestemail varchar(50) default NULL,
guestauthor varchar(30) NOT NULL default '',
guestcommentID smallint(5) unsigned NOT NULL default '0',
gueststatus char(1) NOT NULL default '1',
PRIMARY KEY (guestID)
) TYPE=MyISAM COMMENT='Gästebuch';


Realisierbar oder nicht? *bitte*bitte*

Danke

Gruß
TB
Mit Zitat antworten
freelancermap.de - IT Projektvermittlung für Selbständige und Freiberufler
  #2 (permalink)  
Alt 25-08-2003, 20:51
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Standard

mach eine zweite tabelle für die kommentare und nimm die guestID da als fremdschlüssel

dann lässt sich das wunderbarst über joins realisieren
__________________
Ich denke, also bin ich. - Einige sind trotzdem...
Mit Zitat antworten
  #3 (permalink)  
Alt 26-08-2003, 17:14
cst
 Registrierter Benutzer
Links : Onlinestatus : cst ist offline
Registriert seit: Aug 2003
Beiträge: 141
cst ist zur Zeit noch ein unbeschriebenes Blatt
Standard Re: [SQL allgemein] Abfrage- Sortierung

Zitat:
Original geschrieben von tombstone7
Hi...

ich hoffe diese Abfrage lässt sich überhaupt realisieren und zwar...
[...]

CREATE TABLE guestbooktest (
guestID smallint(5) unsigned NOT NULL auto_increment,
guestdate date NOT NULL default '0000-00-00',
guesttext varchar(250) NOT NULL default '',
guestemail varchar(50) default NULL,
guestauthor varchar(30) NOT NULL default '',
guestcommentID smallint(5) unsigned NOT NULL default '0',
gueststatus char(1) NOT NULL default '1',
PRIMARY KEY (guestID)
) TYPE=MyISAM COMMENT='Gästebuch';


Realisierbar oder nicht? *bitte*bitte*
Klar geht das, aber nicht mit der Tabelle. Du brauchst, wie auch mrhappiness schrieb, eine zweite Tabelle. Also:

1. Tabelle
Code:
CREATE TABLE guestbook (
  ID smallint(5) unsigned NOT NULL auto_increment,
  gbdate date NOT NULL default '0000-00-00',
  text varchar(250) NOT NULL default '',
  email varchar(50) default NULL,
  author varchar(30) NOT NULL default '',
  status char(1) NOT NULL default '1',
  PRIMARY KEY  (ID)
) TYPE=MyISAM COMMENT='Gästebuch';
2. Tabelle
Code:
CREATE TABLE guestbookcomment (
  ID smallint(5) unsigned NOT NULL auto_increment,
  gbID smallint(5) unsigned,
  date date NOT NULL default '0000-00-00',
  comment TEXT NOT NULL default '',
  email varchar(50) default NULL,
  author varchar(30) NOT NULL default '',
  status char(1) NOT NULL default '1',
  PRIMARY KEY  (ID)
) TYPE=MyISAM COMMENT='Kommentare zum Gästebuch';
Da Du MyISAM nimmst, kannst Du nicht mit ForeignKeys arbeiten (na ja, logisch schon, aber ohne Automatismus). Also musst Du das entsprechend raussuchen.

a. Abfrage auf guestbook
b. Ausgabe des Datensatzes
c. gibt es in guestbookcomment einen Datensatz der Bedingung guestbookcomment.gbID = guestbook.ID erfüllt? Wenn ja, auslesen und ausgeben.
d. wieder oben anfangen, bis nichts mehr zu holen ist oder ein Zähler überläuft oder so... naja, das wirst Du schon selber wissen.

Alle Klarheiten beseitigt?
Christoph

EDIT:
code-tags by Abraxax

Geändert von Abraxax (26-08-2003 um 20:28 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 26-08-2003, 19:51
tombstone7
 Newbie
Links : Onlinestatus : tombstone7 ist offline
Registriert seit: Apr 2003
Ort: Kölle
Beiträge: 16
tombstone7 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

schade, daß man das nicht direkt in einer Tabelle lösen kann....

ok...wie sieht dann die Abfrage aus? Mit den Joins hab ich es noch nicht so

Gruß
Mit Zitat antworten
  #5 (permalink)  
Alt 26-08-2003, 20:27
Abraxax
  THE REAL HAXE (Administrator)
Links : Onlinestatus : Abraxax ist offline
Registriert seit: Jul 2002
Ort: neuss.nrw.de
Beiträge: 22.623
Abraxax befindet sich auf einem aufstrebenden Ast
Standard

klar kannst du das auslesen dann auch problemlos mittels JOIN lösen.

das ist sogar einfacher als viele weitere abfragen pro gb-eintrag zu machen.

EDIT:
Code:
CREATE TABLE guestbook (
  gbID smallint(5) unsigned NOT NULL auto_increment,
  gbdate date NOT NULL default '0000-00-00',
  text varchar(250) NOT NULL default '',
  email varchar(50) default NULL,
  author varchar(30) NOT NULL default '',
  status char(1) NOT NULL default '1',
  PRIMARY KEY  (ID)
) TYPE=MyISAM COMMENT='Gästebuch';

CREATE TABLE guestbookcomment (
  ID smallint(5) unsigned NOT NULL auto_increment,
  gbID smallint(5) unsigned,
  date date NOT NULL default '0000-00-00',
  comment TEXT NOT NULL default '',
  email varchar(50) default NULL,
  author varchar(30) NOT NULL default '',
  status char(1) NOT NULL default '1',
  PRIMARY KEY  (ID)
) TYPE=MyISAM COMMENT='Kommentare zum Gästebuch';
Code:
SELECT
    *
FROM
    guestbook G
        LEFT JOIN guestbookcomment C USING(gbID)

__________________
INFO: Erst suchen, dann posten! | MANUAL(s): PHP | MySQL | HTML/JS/CSS | NICE: GNOME Do | TESTS: Gästebuch | IM: Jabber.org |



Geändert von Abraxax (26-08-2003 um 20:30 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 26-08-2003, 20:28
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Standard

Code:
SELECT
  e.eintrag_id, e.eintrag, k.kommentar_id, k.kommentar
FROM
  eintragtabelle e
  LEFT OUTER JOIN kommentartabelle k USING (eintrag_id)
ORDER BY e.datum DESC, k.datum DESC
voraussetzung:
primary keyin eintragtabelle: eintrag_id
foreignkey in kommentartabelle: eintrag_id

in beiden tabellen ne spalte datum die das erstellungsdatum beinhaltet
EDIT:
@Abraxax
nich hauen bitte

__________________
Ich denke, also bin ich. - Einige sind trotzdem...
Mit Zitat antworten
  #7 (permalink)  
Alt 26-08-2003, 20:30
Abraxax
  THE REAL HAXE (Administrator)
Links : Onlinestatus : Abraxax ist offline
Registriert seit: Jul 2002
Ort: neuss.nrw.de
Beiträge: 22.623
Abraxax befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von mrhappiness
EDIT:
@Abraxax
nich hauen bitte

OffTopic:
nö. habs auch grad gepostet..
__________________
INFO: Erst suchen, dann posten! | MANUAL(s): PHP | MySQL | HTML/JS/CSS | NICE: GNOME Do | TESTS: Gästebuch | IM: Jabber.org |


Mit Zitat antworten
  #8 (permalink)  
Alt 26-08-2003, 23:16
tombstone7
 Newbie
Links : Onlinestatus : tombstone7 ist offline
Registriert seit: Apr 2003
Ort: Kölle
Beiträge: 16
tombstone7 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ok...funktioniert teilweise... schon mal schön

jetzt habe ich nur folgende Probleme:
1. wie erkenne ich nun bei der Abfrage jedes Datensatzes, ob es sich um ein Kommentar handelt? der soll nämlich eingerückt werden.

2. hatte im Vorfeld schon mal mit einer Tabelle gebastelt, welche komplett als Kommentar-Tabelle fungieren sollte..mittels eurer Hilfe klappt das ja auch soweit. nur kann ich dem USING (guestID) irgendwie klar machen, daß der Fremdschluessel nicht so heißt wie der Primärschlüssel aus der Guestbook-Tabelle?

refID (in KommentarTabelle) ---> Referenz auf guestID (im GB)

will in der KommentarTabelle noch Kommentare zu Events oder News speichern, daher sollte das alles allgemein gehalten werden.

Gruß
T
Mit Zitat antworten
  #9 (permalink)  
Alt 26-08-2003, 23:26
Abraxax
  THE REAL HAXE (Administrator)
Links : Onlinestatus : Abraxax ist offline
Registriert seit: Jul 2002
Ort: neuss.nrw.de
Beiträge: 22.623
Abraxax befindet sich auf einem aufstrebenden Ast
Standard

zu 1. du musst prüfen, ob die hauptid sich ändern.

zu 2. entweder du bennenst die spalte bei den kommentaren passend um, was sinnvoller ist, da du dadurch genau weisst, welche spalten wie zusammengehören ....

oder du verwendest ON.

Code:
SELECT
    *
FROM
    guestbook G
        LEFT JOIN guestbookcomment C ON (G.guestID = C.refID)
__________________
INFO: Erst suchen, dann posten! | MANUAL(s): PHP | MySQL | HTML/JS/CSS | NICE: GNOME Do | TESTS: Gästebuch | IM: Jabber.org |


Mit Zitat antworten
  #10 (permalink)  
Alt 27-08-2003, 00:48
tombstone7
 Newbie
Links : Onlinestatus : tombstone7 ist offline
Registriert seit: Apr 2003
Ort: Kölle
Beiträge: 16
tombstone7 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

zu 1.) meinst du mit HauptID die guestID? oder versteh ich da jetzt was falsch? experimentiere gerade mit der IF-Abfrage, aber führt immer zum falschen Ergebnis. Hier ein Bsp:

PHP-Code:
IF (!$row["comments.refID"]==$row["guestbook.guestID"])
     
// Haupt-Gästebuch-Eintrag - Formatierung
ELSE
    
// Kommentar-Eintrag - Formatierung 
zu 2.) meine Güte. Da wär ich im Leben nicht drauf gekommen. An dieser Stelle muß einfach ein *herzliches Dankeschön* gesagt werden. Super. Da hätt ich noch Wochen dranngesessen und hätte es wahrscheinlich immer noch nicht... dann funktioniert das auch schonmal so wie ich es gerne hätte. fehlt nur noch Punkt 1. aber da fehlt mir jetzt die denkerische Ader zu später Stunde. *Zzzzzz*

Danke nochmals....
GRuß
Mit Zitat antworten
  #11 (permalink)  
Alt 27-08-2003, 09:08
Abraxax
  THE REAL HAXE (Administrator)
Links : Onlinestatus : Abraxax ist offline
Registriert seit: Jul 2002
Ort: neuss.nrw.de
Beiträge: 22.623
Abraxax befindet sich auf einem aufstrebenden Ast
Standard

ja. ich meine mit der haupt-id die id der guestbook-tabelle.

und was deine ausgabe betrifft, so musst du erst einmal einen temp-var haben. wenn du im forum mal suchst, findest du auch beispiele. ich will jetzt nicht noch einmal das machen, was eh schon über die suche gefunden werden kann..
__________________
INFO: Erst suchen, dann posten! | MANUAL(s): PHP | MySQL | HTML/JS/CSS | NICE: GNOME Do | TESTS: Gästebuch | IM: Jabber.org |


Mit Zitat antworten
  #12 (permalink)  
Alt 27-08-2003, 09:14
mukraker
 Master
Links : Onlinestatus : mukraker ist offline
Registriert seit: Jul 2002
Beiträge: 836
mukraker ist zur Zeit noch ein unbeschriebenes Blatt
mukraker eine Nachricht über ICQ schicken
Standard

das mit left outer , left, right, etc joins habe ich noch nie verstanden, nicht hier und nicht in irgendwelchen anleitungen.

kann mir das einer mal versuchen einfach zu erklären ?
__________________
thx Mukraker
Mit Zitat antworten
  #13 (permalink)  
Alt 27-08-2003, 09:46
Abraxax
  THE REAL HAXE (Administrator)
Links : Onlinestatus : Abraxax ist offline
Registriert seit: Jul 2002
Ort: neuss.nrw.de
Beiträge: 22.623
Abraxax befindet sich auf einem aufstrebenden Ast
Standard

@mukraker
suche mal im forum. da wurde das kürzlich erst beschrieben....
__________________
INFO: Erst suchen, dann posten! | MANUAL(s): PHP | MySQL | HTML/JS/CSS | NICE: GNOME Do | TESTS: Gästebuch | IM: Jabber.org |


Mit Zitat antworten
  #14 (permalink)  
Alt 27-08-2003, 10:40
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Standard

@tombstone7
unterscheiden ob es ein gästebucheintrag oder ein kommentar is, is übelst einfach, da dir das select zwei spalten liefert, einer für gb-eintrag, eine für kommentar und du weißt ja wohl welche du abfragst *g*

was etwas komplizierter ist, ist festzustellen ob ein datensatz zum ersten eintrag gehört oder ob es der zweite eintrag in deinem gästebuch ist
PHP-Code:
$result=mysql_query('die abfrage');
$oldid=-454874;
while (
$row mysql_fetch_assoc($result))
{
  if (
$row['guestid'] != $oldid)
  {
     
$oldid=$row['guestid'];
     
//Eintrag im Gästebuch: ausgeben
  
}
   
//Hier stehen die Kommentare: ausgeben

__________________
Ich denke, also bin ich. - Einige sind trotzdem...
Mit Zitat antworten
  #15 (permalink)  
Alt 28-08-2003, 16:53
tombstone7
 Newbie
Links : Onlinestatus : tombstone7 ist offline
Registriert seit: Apr 2003
Ort: Kölle
Beiträge: 16
tombstone7 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hi,

danke, daß klappt alles nun wunderbar, aber ein kleines Problemche mit der Abfrage existiert noch...

PHP-Code:
$query="SELECT g.*, c.* FROM guestbooktest AS g 
LEFT OUTER JOIN comments AS c ON (g.guestID = c.refID)
WHERE g.gueststatus=1 AND c.commentstatus=1 AND c.ref='$content'
ORDER BY g.guestdate DESC, c.commentdate ASC"

nun ist das Problem, daß er nur die Gästebuch-Einträge und Kommentare ausgibt, die auch welche haben. Das kommt wohl wegen (AND c.commentstatus=1 AND c.ref='$content').

Gibt es da eine elegante Möglichkeit, wie er auch die anderen (nicht kommentierten) GB-Einträge anzeigt mit den status-Feldern?

Gruß
T

Geändert von tombstone7 (28-08-2003 um 16:55 Uhr)
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

PHP Marktplatz-Software
PHP Marktplatz-SoftwareEs hat sich viel getan! Die neue Version 7.5.9 unserer PHP Marktplatz-Software ebiz-trader steht ab sofort zur Verfügung.

28.10.2019 | Berni

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni


 

Aktuelle PHP Scripte

SMT

Server Monitoring & Management Tool Das SMT wurde von einem Administrator für Administratoren entwickelt, es vereinfacht den Alltag in der klassischen Administration und Verwaltung. Mit dem SMT kannst Du alle Deine Server & Dienste verwalten und überwach

04.09.2020 palle_1977 | Kategorie: PHP
numaeks Web-Farbmixer

Die RGB-Farben lassen sich hier auf unterschiedliche Weise mischen. Zur Einstellung werden auch die Dreh- und Schieberegler mit Canvas verwendet. Gespeichert werden die Farben in einem Cookie.

04.09.2020 numaek | Kategorie: JAVASCRIPT/ Tools
phplinX-Erotikportal 4 ansehen phplinX-Erotikportal 4

Erweiterbares Portal speziell für Erotik mit den Modulen Webkatalog, Bannermanagement und Kleinanzeigenmarkt. Sämtliche Module können über einen einzigen Adminbereich verwaltet werden.

18.06.2020 Cosinus14 | Kategorie: PHP/ Anzeigenmarkt
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:43 Uhr.