Einzelnen Beitrag anzeigen

Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

SQL-Abfragen zusammenfassen

  Alt 6. Jul 2006, 07:07
Datenbank: MySQL • Version: 4 • Zugriff über: PHP
Hallo zusammen,

es geht ums Auslesen von Einträgen eines Blogs.

Ich nutze folgende 4 MySQL-Queries in einer PHP-Datei, wobei hierbei nur die ersten 3 relevant sein dürften (seltsam gehighlighted, ich weiß):

Code:
// get blog entry
$sql_query = "[b]SELECT[/b] b.*, bd.*
   [b]FROM[/b] " . BLOG_ENTRIES . " b
   [b]LEFT JOIN[/b] " . BLOG_ENTRIES_DATA . " bd
   [b]ON[/b] b.blog_id = bd.blog_id
   [b]WHERE[/b] b.lang = " . sqlval($site_lang['lang_short']) . "
   [b]AND[/b] b.blog_id = " . sqlval($id) . "
   [b]AND[/b] bd.blog_show = 1";
Code:
// get navigation links

// previous entry
$sql_query = "[b]SELECT[/b] bd.blog_id, b.blog_title
   [b]FROM[/b] " . BLOG_ENTRIES . " b
   [b]LEFT JOIN[/b] " . BLOG_ENTRIES_DATA . " bd
   [b]ON[/b] b.blog_id = bd.blog_id
   [b]LEFT JOIN[/b] " . BLOG_CATEGORIES_DATA . " bcd
   [b]ON[/b] bd.blog_cat_id = bcd.blog_cat_id
   [b]WHERE[/b] b.lang = " . sqlval($site_lang['lang_short']) . "
   [b]AND[/b] bcd.blog_cat_show = 1
   [b]AND[/b] bd.blog_id > " . $id . "
   [b]ORDER BY[/b] bd.blog_id [b]ASC[/b]
   [b]LIMIT[/b] 1";

[...]

// next entry
$sql_query = "[b]SELECT[/b] bd.blog_id, b.blog_title
   [b]FROM[/b] " . BLOG_ENTRIES . " b
   [b]LEFT JOIN[/b] " . BLOG_ENTRIES_DATA . " bd
   [b]ON[/b] b.blog_id = bd.blog_id
   [b]LEFT JOIN[/b] " . BLOG_CATEGORIES_DATA . " bcd
   [b]ON[/b] bd.blog_cat_id = bcd.blog_cat_id
   [b]WHERE[/b] b.lang = " . sqlval($site_lang['lang_short']) . "
   [b]AND[/b] bcd.blog_cat_show = 1
   [b]AND[/b] bd.blog_id < " . $id . "
   [b]ORDER BY[/b] bd.blog_id [b]DESC[/b]
   [b]LIMIT[/b] 1";
Code:
// get blog_category
$sql_query = "[b]SELECT[/b] bd.*, b.*
   [b]FROM[/b] " . BLOG_CATEGORIES . " b
   [b]LEFT JOIN[/b] " . BLOG_CATEGORIES_DATA . " bd
   [b]ON[/b] b.blog_cat_id = bd.blog_cat_id
   [b]WHERE[/b] b.lang = " . sqlval($site_lang['lang_short']) . "
   [b]AND[/b] b.blog_cat_id = " . sqlval($blog_entry['blog_cat_id']) . "
   [b]AND[/b] bd.blog_cat_show = 1
   [b]ORDER BY[/b] bd.blog_cat_id [b]DESC[/b]";
Ich habe schon mit einer Person gesprochen, die sich mit SQL recht gut auskennt, und da mussten wir leider mit obigen Queries verbleiben, was mit jedoch nicht sonderlich gut gefällt, gerade 2 Abfragen für den nächsten/vorigen Eintrag. Vielleicht kennt ihr eine schönere Möglichkeit.
Die 2 mittleren Abfragen (hier der 2. Code-Block) sind je dafür da, den vorigen und den nächsten Blog-Eintrag samt Titel auszulesen. Mit UNION konnte ich das nicht zusammenfassen, da es dann Probleme mit ORDER BY gibt (wieso auch immer). Ganz schön wäre es, wenn man die ersten 3 Abfragen zusammenfassen könnte, natürlich so, dass das noch übersichtlich bleibt.

Ist sowas möglich, wenn ja, wie?
  Mit Zitat antworten Zitat