[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Verschachtelte SQL Abfrage - 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/
gsz
Beiträge: 38
Registriert: 8. Apr 2011, 17:00

Verschachtelte SQL Abfrage

8. Mai 2012, 19:22

Hallo, ich habe folgendes Problem:

Jetziger Script:

Code: Alles auswählen

$sql = new rex_sql;

$sql->setQuery("
SELECT * FROM rex_artikel 
WHERE status = 1 
AND gender = 'REX_VALUE[1]'  
ORDER BY price 
");
Problem:
Ich möchte eine weitere Sortierung in der SQL Abfrage einbinden, aber die Variable wird erst später validiert:

Code: Alles auswählen

$angebotspreis = $sql->getValue('price');
$angebotspreis = $sql->getValue('offer');
sie existiert also noch nicht in der DB.

Mein Wunsch:
ORDER BY angebotspreis, price

Hat jemand eine Idee?

Vielen Dank,
Greg

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

Re: Verschachtelte SQL Abfrage

10. Mai 2012, 17:34

Hej,

nach dem was du geschrieben hast, müsste es so sein:

Code: Alles auswählen

ORDER BY offer, price 
vg Thomas

gsz
Beiträge: 38
Registriert: 8. Apr 2011, 17:00

Re: Verschachtelte SQL Abfrage

10. Mai 2012, 22:01

Thomas.Blum hat geschrieben:Hej,

nach dem was du geschrieben hast, müsste es so sein:

Code: Alles auswählen

ORDER BY offer, price 
vg Thomas
Hallo Thomas,

danke für die Antwort... aber ganz so einfach ist es nicht.

Ich glaube, meine Frage war nicht aussagekräftig genug formuliert ;)

$price steht für einen Preis als Zahl (db)
$offer steht für eine Prozentangabe ebenfalls als Zahl (db)

$angebotspreis wird erst in der SQL Abfrage ermittelt, als Resultat aus $preis und $offer:

Wenn kein Angebot existiert, wird der reguläre Preis angezeigt, ansonsten der Preis minus Angebot gleich Angebotspreis.
Funktioniert alles wunderbar.

Code: Alles auswählen

$angebot = $sql->getValue('offer');
$preis = $sql->getValue('price');

$angebotspreis = $sql->getValue('price');
$angebotspreis = $sql->getValue('offer');

if($angebot == "") 
    {
echo '<div class="preis">';
echo 'Preis: ';
echo $preis.' €';
echo '</div>';         
    }

else 
    {
echo '<div class="preis">';
echo 'regulärer Preis: ';
echo $preis.' € | ';
echo 'Nachlass: -';
echo $angebotspreis.' %';
echo '</div>';     

echo '<div class="offer">';
echo 'Unser Angebotspreis: ';
echo $preis - (($preis / 100) * $angebotspreis).' €';
echo '</div>';
    }
Jetzt das Problem:
Ich möchte schon aber alle Produkte auf der Seite nach $angebotspreis sortieren, bevor in der SQL Abfrage überhaupt $angebotspreis ermittelt wird.
Und zwar erst nach $angebotspreis (nicht als db Feld vorhanden) und dann nach $price (db)

Vielleicht ist´s jetzt klarer... :?

Danke...
Greg

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

Re: Verschachtelte SQL Abfrage

11. Mai 2012, 08:46

Hej,

Code: Alles auswählen

$angebotspreis = $sql->getValue('price');
$angebotspreis = $sql->getValue('offer');
das verwirrte. Denn dein $angebotspreis ist immer der Wert aus "offer".

Den Angebotspreis kannst du doch einfach im SELECT berechnen. Einfach offer von price abziehen.


vg Thomas

Hirbod
Beiträge: 435
Registriert: 15. Jan 2008, 14:46

Re: Verschachtelte SQL Abfrage

11. Mai 2012, 11:36

Er muss es aber erstmal definieren, deswegen:

Code: Alles auswählen


$sql->setQuery("
SELECT *, (price*offer) AS angebotspreis FROM rex_article
WHERE status = 1
AND gender = 'REX_VALUE[1]' 
ORDER BY price DESC, angebotspreis DESC
");

hab rex_artikel mal in rex_article umbenannt

Hatte ich dir schon per Mail geschickt ;)

"DESC" kanna auch weggelassen werden oder durch "ASC" ersetzt werden

Benutzeravatar
frag-seb
Beiträge: 211
Registriert: 27. Sep 2011, 17:53
Wohnort: München
Kontaktdaten: Website

Re: Verschachtelte SQL Abfrage

11. Mai 2012, 11:40

Hallo zusammen,

also hier wäre mal ein Bsp. wie so was in der Select abfrag gemacht werden
könnte, muss du aber mal testen, ob das geht.

Achtung, wenn es kein Angebot gibt, muss der Wert 0 sein.

Würde es aber wegen der Performance, entweder dann cachen oder es gar
nicht in der mySQL abfrag machen, sondern, alles ausrechnen und alles über
eine array ausgeben.

Code: Alles auswählen

$sql = new rex_sql;

$sql->setQuery("
SELECT
    preis,
    offer, 
    CONCAT(preis / offer * 100, '%') AS angebotspreis
FROM
    rex_artikel
WHERE 
	status = 1 
AND 
	gender = 'REX_VALUE[1]'
GROUP BY
    angebotspreis 
");
Gruß
Jochen

Benutzeravatar
frag-seb
Beiträge: 211
Registriert: 27. Sep 2011, 17:53
Wohnort: München
Kontaktdaten: Website

Re: Verschachtelte SQL Abfrage

11. Mai 2012, 11:45

Jetzt war Hirbod echt noch schneller ... :-)

Hirbod
Beiträge: 435
Registriert: 15. Jan 2008, 14:46

Re: Verschachtelte SQL Abfrage

11. Mai 2012, 12:06

frag-seb, ein kleines bisschen :)

Aber du hast treffend die Probleme angesprochen :)

Zurück zu „Sonstiges“