[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
REDAXO Forum • "Anpinnen" von Artikeln mittels Linkmap
Seite 1 von 1

"Anpinnen" von Artikeln mittels Linkmap

Verfasst: 22. Feb 2013, 20:03
von cukabeka
Kann mir jemand hiermit helfen? Ich will mehrere Artikel aus der Datenbank holen, diese sollen nach createdate sortiert sein. Außerdem sollen vornedran bestimmte Artikel gesetzt werden, die bestimmte IDs haben. Diese sollen in dem zweiten Teil der Abfrage nicht vorkommen. Ich hab das mal so versucht:

Code: Alles auswählen

SELECT id FROM rex_article 
WHERE (startpage = '0' AND status = '1') 
AND (id LIKE '3,2,1') ORDER BY nix_besonderes_sondern_der_reihenfolge_nach
OR ((path LIKE '%|10|%') OR (path LIKE '%|9|%') OR (path LIKE '%|19|%') OR (path LIKE '%|18|%') OR (path LIKE '%|40|%')) 
ORDER BY createdate DESC
LIMIT 1000
Die IDs sollen also zuerst selektiert werden, aber nicht sortiert, danach alle möglichen anderen Artikel geholt werden, aber nach createdate sortiert. Wenn diese schon bei der ID-Abfrage dabei waren, dann nicht mehr. Bin etwas ratlos.
Ist das ein fall für JOIN? eigentlich nicht, oder?

Re: MySQL-Abfrage nach 2 Sortierkriterien

Verfasst: 22. Feb 2013, 20:25
von cukabeka
Dank Gregor konnte ich es wie folgt lösen:

Code: Alles auswählen

SELECT id FROM rex_article

WHERE (startpage = '0' AND status = '1') 
AND 
(
id IN (20,5,192)
OR ((path LIKE '%|10|%') OR (path LIKE '%|9|%') OR (path LIKE '%|19|%') OR (path LIKE '%|18|%') OR (path LIKE '%|40|%'))
)

ORDER BY IF(id IN (20,5,192), UNIX_TIMESTAMP(), createdate) DESC
danke nochmal gregor!

"Anpinnen" von Artikeln mittels Linkmap

Verfasst: 22. Feb 2013, 20:49
von cukabeka
Hier vielleicht noch ein weiteres Update für alle, die es interessiert inkl. PHP. Ich habe das verwendet, um in einer Artikelliste vorne unabhängig Artikel "festpinnen" zu können und danach den Rest mit chronologisch sortierten Artikel zu füllen.

Code: Alles auswählen

$linkmap = "REX_LINKLIST[1]";
$linkmap_reverse = implode(",",array_reverse(explode(",","REX_LINKLIST[1]")) );

$sql = rex_sql::factory();
$sql->setQuery("
  SELECT id
  FROM rex_article
    WHERE (startpage = '0' AND status = '1') 
    AND 
    (
    id IN (".$linkmap.")
    OR ((path LIKE '%|".implode("|%') OR (path LIKE '%|", $cat_ids)."|%'))
    )
  ORDER BY FIND_IN_SET(id, '".$linkmap_reverse."') DESC, createdate DESC
  
  LIMIT 20
");
danke nochmal an gregor für seine hilfe. darauf wäre ich sicher nicht selbst gekommen :lol: