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-10-2006, 11:51
Burnout
 Newbie
Links : Onlinestatus : Burnout ist offline
Registriert seit: Jun 2006
Beiträge: 38
Burnout ist zur Zeit noch ein unbeschriebenes Blatt
Standard schwieriger SQL select

Habe folgendes Problem:

Ich habe ein eigenes Forum geschrieben und möchte in der Übersicht des Boards die Reihenfolge der Threads mit antworten nach Datum sortieren und die Threads ohne Antwort sollen vorher kommen. Folgender Query wurde von mir geschrieben:

PHP-Code:
$sql "SELECT tbl1.ID,tbl1.user_ID,tbl1.head,";
$sql .= "Date_FORMAT(tbl1.posted, '%d.%m.%Y  %H:%i'),MAX(tbl2.posted) as tmp,COUNT(tbl2.ID)";
$sql .= " FROM forum_thread AS tbl1 LEFT JOIN forum_posts AS tbl2 ON tbl1.ID=tbl2.thread_ID ";
$sql .= "WHERE tbl1.board_ID='".$board_ID."' OR";
$sql .= " (tbl1.board_ID='".$board_ID."' AND tbl2.thread_ID IS NULL)";
$sql .= " GROUP BY tbl1.ID ORDER BY tmp DESC";
$sql mysql_query($sql);
while (
$data mysql_fetch_row($sql)){
    echo 
"<tr><td>\n";
    echo 
"<a href=index.php?s=forum_thread&thread_ID=".$data[0]."&board_ID=".$board_ID.">";
    echo 
$data[2]."</a>";
    echo 
"</td>\n";
    echo 
"<td align=center>".get_user($data[1])."<br>".$data[3]."</td>\n";
    echo 
"<td align=center>".$data[5]."</td>\n";
    
$sql2 "SELECT user_ID, Date_FORMAT(posted, '%d.%m.%Y  %H:%i') ";
    
$sql2 .= "FROM forum_posts WHERE thread_ID = ".$data[0]." order by posted desc";
    
$sql2 mysql_query($sql2);
    list(
$user,$date) = mysql_fetch_row($sql2);
    echo 
"<td align=center>";
    echo 
get_user($user)."</A><br>".$date;
    echo 
"</td></tr>\n";

leider steg´hen dann die threads ohne Einträge ganz unten. Liegt wohl daran, dass da NULL drinn steht, oder? Wie bekomme ich das jetzt hin, das es so aussieht wie ich es mir wünsche.

So ich hoffe ich habe mich halbwegs klar ausgedrückt und mein Thread ist verständlich ^^

Geändert von Burnout (29-10-2006 um 12:30 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 29-10-2006, 12:06
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

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


Mit Zitat antworten
  #3 (permalink)  
Alt 29-10-2006, 12:09
Burnout
 Newbie
Links : Onlinestatus : Burnout ist offline
Registriert seit: Jun 2006
Beiträge: 38
Burnout ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Entschuldige ich stehe auf dem Schlauch wo soll ich Umbrüche machen??
Mit Zitat antworten
  #4 (permalink)  
Alt 29-10-2006, 12:11
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

http://www.php-resource.de/forum/sho...threadid=50454
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #5 (permalink)  
Alt 29-10-2006, 12:30
Burnout
 Newbie
Links : Onlinestatus : Burnout ist offline
Registriert seit: Jun 2006
Beiträge: 38
Burnout ist zur Zeit noch ein unbeschriebenes Blatt
Standard

So ich hoffe ich habe jetzt richtig formatiert
Mit Zitat antworten
  #6 (permalink)  
Alt 30-10-2006, 10:05
Burnout
 Newbie
Links : Onlinestatus : Burnout ist offline
Registriert seit: Jun 2006
Beiträge: 38
Burnout ist zur Zeit noch ein unbeschriebenes Blatt
Standard

weis denn keiner was?
Mit Zitat antworten
  #7 (permalink)  
Alt 30-10-2006, 11:05
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: schwieriger SQL select

ORDER BY
und dann die Funktion verwenden: http://dev.mysql.com/doc/refman/5.1/...unction_isnull
Mit Zitat antworten
  #8 (permalink)  
Alt 30-10-2006, 15:17
Burnout
 Newbie
Links : Onlinestatus : Burnout ist offline
Registriert seit: Jun 2006
Beiträge: 38
Burnout ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Nach einigem rumprobieren muss ich leider sagen: ich weis nicht wie ich das einbauen soll würdest du mir das genauer erklären?
Mit Zitat antworten
  #9 (permalink)  
Alt 30-10-2006, 17: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 Re: schwieriger SQL select

So dachte ich
Code:
SELECT tbl1.ID, tbl1.user_ID, tbl1.head, Date_FORMAT(tbl1.posted, '%d.%m.%Y  %H:%i'),
MAX(tbl2.posted) as tmp, COUNT(tbl2.ID)
FROM forum_thread AS tbl1 LEFT JOIN forum_posts AS tbl2 ON tbl1.ID=tbl2.thread_ID
WHERE tbl1.board_ID=2 OR (tbl1.board_ID=2 AND tbl2.thread_ID IS NULL)
GROUP BY tbl1.ID
ORDER BY ISNULL(tmp) DESC, tmp DESC
btw. du weißt, dass die Bedingung hinter OR keinen Sinn hat? Du grenzt einmal mit board_ID=X ein und dann nochmal mit board_ID=X, was nach der letzten Bedingung auf jeden Fall true ist. Wenn es das nicht ist, wird durch das AND gar nicht zur thread_ID IS NULL-Bedingung gegangen, d.h. alles ab OR bis zum Ende der Klammer ist vollkommen sinnfrei
Mit Zitat antworten
  #10 (permalink)  
Alt 30-10-2006, 18:47
Burnout
 Newbie
Links : Onlinestatus : Burnout ist offline
Registriert seit: Jun 2006
Beiträge: 38
Burnout ist zur Zeit noch ein unbeschriebenes Blatt
Standard Re: Re: schwieriger SQL select

Zitat:
Original geschrieben von ghostgambler
Du grenzt einmal mit board_ID=X ein und dann nochmal mit board_ID=X, was nach der letzten Bedingung auf jeden Fall true ist. Wenn es das nicht ist, wird durch das AND gar nicht zur thread_ID IS NULL-Bedingung gegangen, d.h. alles ab OR bis zum Ende der Klammer ist vollkommen sinnfrei [/B]
Nun ja. Es ist doch eigentlich so:

Da steht "or" also:
entweder board_ID=X oder der IS NULL fall.
Damit findet man aber in jedem angezeigten board den thread eben weil da "oder" steht.

Deshalb muss ich in der klammer (also "entweder" board_ID=X "oder" klammer) nochmal die board_ID fragen,
weil sonst da steht "entweder" board_ID "oder" ISNULL und das ist ja nicht das was selektiert werden soll.

Ich kann mich natürlich irren.


Dein Tip:
Code:
ORDER BY ISNULL(tmp) DESC, tmp DESC
gibt folgenden Fehler aus:
Unknown column 'tmp' in 'order clause'

Geändert von Burnout (30-10-2006 um 18:51 Uhr)
Mit Zitat antworten
  #11 (permalink)  
Alt 30-10-2006, 20:06
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: Re: Re: schwieriger SQL select

Zitat:
Original geschrieben von Burnout
Da steht "or" also:
entweder board_ID=X oder der IS NULL fall.
Entweder steht da schon mal gar nicht, das wäre nämlich XOR

Zitat:
Damit findet man aber in jedem angezeigten board den thread eben weil da "oder" steht.
Bitte?

a <-> board_ID=X
b <-> IS NULL
+ = OR
x = AND
Du hast
a + (a x b)
Daraus lässt sich per Distributiv-Gesetz folgendes bilden
a x (1 + b)
d.h.
a UND (true ODER b)
Wann soll also bitte b mal nach seiner Meinung gefragt werden?

Zitat:
Dein Tip:
Code:
ORDER BY ISNULL(tmp) DESC, tmp DESC
gibt folgenden Fehler aus:
Unknown column 'tmp' in 'order clause'
Gib mal bitte einen Test-Dump
Mit Zitat antworten
  #12 (permalink)  
Alt 30-10-2006, 21:08
Burnout
 Newbie
Links : Onlinestatus : Burnout ist offline
Registriert seit: Jun 2006
Beiträge: 38
Burnout ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Also zu dem WHERE Problem:

Vorweg: anders ging es bisher nicht, ich hatte es erst so
wie du sagtest

ich habe eine Tabelle mit mehreren boards deshalb die
board_ID im where soweit sind wir uns einig ^^

wenn ich jetzt AND tbl2.thread_ID IS NULL
dazugebe dann kommen nur welche die
bisher keine antworten erhalten haben
da ja keine thread_ID gefunden werden soll

wenn ich stattdessen OR tbl2.thread_ID IS NULL
finde ich auch bei einem anderen board den thread
weil ja auch ohne board_ID ein thread ohne Antworten
gefunden werden kann.

Also muss ich eine Klammer machen und diesem statement
die board_ID nochmal anfügen.

dump hängt an allerdings ohne user tabelle

user_ID bezieht sich auf diese tabelle ebenso moderator
aber das hast du bestimmt auch so mitbekommen
Angehängte Dateien
Dateityp: txt neu textdokument.txt (13,1 KB, 89x aufgerufen)
Mit Zitat antworten
  #13 (permalink)  
Alt 30-10-2006, 21:34
phoenix97i
 Banned
Links : Onlinestatus : phoenix97i ist offline
Registriert seit: Oct 2006
Beiträge: 8
phoenix97i ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo Burnout

zuerst einmal- Ghostgambler hat recht, dass das OR (tbl1.board_ID=2 AND tbl2.thread_ID IS NULL)
überflüssig ist.

dann- sollte ORDER BY ISNULL(tmp) DESC gehen, wenn ORDER BY tmp DESC funktioniert hat.

Als Alternative kannst du irgendein Feld von tbl2 zum sortieren verwenden, z.B.
ORDER BY ISNULL(tbl2.thread_ID) DESC, tmp DESC

An der Funktion ISNULL() sollte es nicht liegen, das Sortieren nach expressions ist standard.

Viel Glück.
Mit Zitat antworten
  #14 (permalink)  
Alt 30-10-2006, 21:47
Burnout
 Newbie
Links : Onlinestatus : Burnout ist offline
Registriert seit: Jun 2006
Beiträge: 38
Burnout ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Jetzt funktioniert alles vielen dank für die Hilfe!
Mit Zitat antworten
  #15 (permalink)  
Alt 30-10-2006, 21:49
phoenix97i
 Banned
Links : Onlinestatus : phoenix97i ist offline
Registriert seit: Oct 2006
Beiträge: 8
phoenix97i ist zur Zeit noch ein unbeschriebenes Blatt
Standard

wie sieht diese query jetzt aus?
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 08:52 Uhr.