[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
SQL-Query - wie mache ich das richtig in R5? - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
derkrebs
Beiträge: 149
Registriert: 4. Okt 2011, 17:27

SQL-Query - wie mache ich das richtig in R5?

27. Jan 2017, 19:36

Hallo,

ich benötige eine Artikelliste, in der auch jeweils ein Teil der Inhalte mit ausgegeben wird. Für die Abfrage der Daten habe ich bisher (also in Redaxo 4.x) immer folgende SQL-Syntax verwendet:

Code: Alles auswählen

$res = $sql->getArray('SELECT * FROM '.$REX['TABLE_PREFIX'].'article_slice WHERE article_id IN (' . $sql_array . ') and modultyp_id=' . $modulid . ' ORDER BY value20 DESC');
Wie "übersetze" ich das richtig für Redaxo 5? Ich hab meine Abfrage aktuell so angepasst:

Code: Alles auswählen

$res = $sql->getArray('SELECT * FROM ' . rex::getTablePrefix() . 'article_slice WHERE article_id IN (' . $sql_array . ') and module_id=' . $modul_id . ' ORDER BY value20 DESC LIMIT 3');
Leider funktioniert das scheinbar nicht - für alle Felder die ich abfrage bekomme ich diese Fehlermeldung:
Warning: Field "article_id" does not exist in result! in [...]/redaxo/src/core/lib/sql/sql.php on line 583
Warning: Field "value2" does not exist in result! in [...]/redaxo/src/core/lib/sql/sql.php on line 583
Warning: Field "value4" does not exist in result! in [...]/redaxo/src/core/lib/sql/sql.php on line 583
Kann mir hier vielleicht jemand auf die Sprünge helfen?

Ich hab hier mal den entsprechenden Auszug aus meinem Modul-Code:

Code: Alles auswählen


$news_cat_id = 'REX_LINK[1]';

$modul_id = 3;
$art_ids = array();

// Artikel der aktuellen Kategorie holen
$articles = rex_category::get($news_cat_id)->getArticles();

// Array aus Artikel-IDs
if (count($articles)) {
	
	foreach ($articles as $article) {
	
		if ($article->getValue('status') != 0) { // Artikel ist online
			
			if ($article instanceof rex_article && !$article->isStartArticle()) {
				$art_ids[] = $article->getValue('id');
			}
			
		}
		
	}
	
}

print_r($art_ids); // Zur Überprüfung des Arrays -> gibt die richtigen Werte aus.

// Daten aus DB holen
$sql_array = implode(',',$art_ids);

$sql = rex_sql::factory();
$res = $sql->getArray('SELECT * FROM ' . rex::getTablePrefix() . 'article_slice WHERE article_id IN (' . $sql_array . ') and module_id=' . $modul_id . ' ORDER BY value20 DESC LIMIT 3');

if($sql->getRows()) {
	
	while($sql->hasNext()) {
		
		$t_id = $sql->getValue('article_id');
		$t_head = $sql->getValue('value2');
		$t_copy = $sql->getValue('value4');
		
		[ ... ]
		
		$sql->next(); // nächster Eintrag laden. 
	}
	
}
Vielen Dank für Eure Hilfe!

Gruß, Michael

Benutzeravatar
alexplus
Beiträge: 212
Registriert: 13. Feb 2007, 15:03
Wohnort: Heilbronn
Kontaktdaten: Website

Re: SQL-Query - wie mache ich das richtig in R5?

29. Jan 2017, 21:25


derkrebs
Beiträge: 149
Registriert: 4. Okt 2011, 17:27

Re: SQL-Query - wie mache ich das richtig in R5?

30. Jan 2017, 00:09

Hi Alex,

vielen Dank für Deine Antwort - leider helfen mir die Links irgendwie nicht weiter. Auf den Seiten war ich schon und hatte auch schon das Beispiel aus der Dokumentation ausprobiert.

Mein Problem mit diesem Beispiel ist, dass ich nicht wirklich weiß, wo ich den Teil ab "ORDER BY" unterbringe - packe ich das auch bei $sql->setWhere(...) mit rein? Oder gibt es dafür einen extra Befehl (also z. B. $sql->setOrderBy oder so ähnlich). Wenn ich den Teil bei setWhere mit eingegeben habe, hat es nicht so richtig so richtig funktioniert. Es kamen dann nur die Inhalte von einem Artikel doppelt raus, obwohl ich vier verschieden Artikel (natürlich unter Verwendung des selben Moduls) angelegt habe...

:(

Benutzeravatar
runstop64
Beiträge: 369
Registriert: 23. Okt 2012, 21:34
Wohnort: Hamburg
Kontaktdaten: Website Facebook Twitter

Re: SQL-Query - wie mache ich das richtig in R5?

30. Jan 2017, 03:13

Hi, wenn du deine Abfrage mit getArray machst, steht das vollständige Datenergebnis in $res. Du kannst einfach dieses Array durchlaufen und musst keine weiteren Daten über die sql-Klasse holen.
Viele Grüße,
Daniel


studio-ahoi.de | Referenzen | Friends Of REDAXO

derkrebs
Beiträge: 149
Registriert: 4. Okt 2011, 17:27

Re: SQL-Query - wie mache ich das richtig in R5?

30. Jan 2017, 18:05

Hi Daniel,

danke für den Tipp - so funktioniert's! Und das mit der doppelten Ausgabe hängt scheinbar mit der Spalte "revision" in der Tabelle"'rex_article_slice" zusammen (ist die neu in Redaxo 5?) - dort wird offensichtlich der Status der Artikel-Version (1 = Live-Version, 0 = Arbeitsversion - richtig?) gespeichert. Wenn ich das in die Abfrage mit einbinde, klappt es.

Trotzdem würde mich mal interessieren, warum der herkömmliche Weg nicht mehr funktioniert...?

Gruß, Michael :)

Zurück zu „Allgemeines [R5]“