WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Abfrage /PHP/MySql (http://www.wcm.at/forum/showthread.php?t=140888)

reichr 02.08.2004 20:08

Abfrage /PHP/MySql
 
hallo!

habe 2 tabellen:

veranstaltung
veranstaltung_option

nun habe ich eine select anweisung in einer while schleife
die mir 3 kategorien ausgibt..

unter jeder kategorie soll nun der günstigste optionspreis stehen!

dH in der tabelle veranstaltung_option steht in der spalte opt_preis eine zahl. nun soll in dieser while schleife noch eine abfrage sein
der mir den kleinsten wert der spalte opt_preis zurückgibt!


es sind für jede veranstaltung mehrere optionspreise vergeben.
verknüpfung: $veranstaltung[id] = option_id

wie mach ich das am besten???

Hussl 03.08.2004 07:09

Wenn ich dich richtig verstanden habe, dann müsste das doch mit der Group by-, Min-, bzw. Max-Funktion funktionieren.

Mehr Infos: http://dev.mysql.com/doc/mysql/en/GR...Functions.html

reichr 03.08.2004 08:03

habs jetz so mal gelöst:



PHP-Code:

$sqlbefehl"Select b.id,a.verid,a.optpreis
             From $tab_veranstaltung b
             Left join $tab_veropt a on a.verid=b.id
             Where b.id='$ver[id]' order by optpreis asc limit 0,1"
;
$ergebnis  mysql_query($sqlbefehl$serverid);
if (
mysql_num_rows($ergebnis) == 1) {
$vermysql_fetch_array ($ergebnis);
 echo 
"ab $ver[optpreis] Euro"; } 



nur:
es kommen jetzt wieder alle datensätze raus!

zB
100
50
20

wo kann ich hier das group by oder min einbauen??

wie kann ich das jetzt auf das kleinste reduzieren, damit mir nur der wert mit 20 rauskommt und die anderen werte nicht?

ich muss leider die veranstaltungen in einer while schleife davor abfragen damit ich alle veranstaltungen habe und hier den "ab" preis aus der veranstaltungs id herauszubekommen.

Hussl 03.08.2004 08:19

Hab mit MySQL jetzt nicht so die Erfahrung, aber probiers mal damit:

Code:

SELECT b.id, a.verid, MIN(a.optpreis)
FROM $tab_veranstaltung b LEFT JOIN $tab_veropt a ON a.verid=b.id
WHERE b.id='$ver[id]'
GROUP BY b.id;

Bin mir jedoch mit dem b.id als Gruppierung nicht ganz sicher. Aber damit solltest du, glaub ich, zu jeder Veranstaltung den niedrigsten Preis bekommen.

Was mir jedoch noch nicht ganz klar ist, warum du eine While-Schleife brauchst, um alle Veranstaltungen zu bekommen?

reichr 03.08.2004 08:26

mmh.. thx..
wars aber nicht leider ... :(

die schleife - für die formatierung

Hussl 03.08.2004 10:23

Gibts eine Fehlermeldung? Oder kommt nur das falsche raus? Wenn ja, kommen dann wieder alle Datensätze zurück?

Kannst du vielleicht testweise Daten wie sie in der Tabelle stehen posten? Ich tu mir da immer leichter :D

reichr 03.08.2004 10:28

naja.. es werden ja nur die bezeichnungen der veranstaltung ausgegeben!


--------------------
ROCK POP
ab 20 euro


--------------------
JAZZ
ab 29 euro


--------------------
FUNK
ab 12 euro




so solls aussehen
die überschriften us funktionieren ja sowies soll
nur der ab preis net

Hussl 03.08.2004 11:03

Hmm, ich steh irgendwie an. Ich weiß nicht woran der Fehler liegen sollte.

Was mir jedoch aufgefallen ist:

PHP-Code:

$sqlbefehl"Select b.id,a.verid,a.optpreis 
             From $tab_veranstaltung b 
             Left join $tab_veropt a on a.verid=b.id 
             Where b.id='$ver[id]' order by optpreis asc limit 0,1"


Hier verwendest du die Variable $ver[id]. Das kommt von der besagten Schleife?

PHP-Code:

$vermysql_fetch_array ($ergebnis); 

Und hier lädst du das Recordset wieder in diese Variable. Vielleicht solltest du hier eine andere Variable verwenden, da du dir hiermit die Variable der Schleife überschreibst.


Wenn das alles Blödsinn ist, möge man es mir verzeihen ;)

reichr 03.08.2004 11:04

genau .. kommt von der schleife!
mmh.. muss ich mir jetz mal anschaun..

reichr 03.08.2004 11:11

achnö.. die $ver[id] ist von dem select für den "ab" preis
so sieht das ganze aus:

PHP-Code:

$sqlbefehl"Select * FROM $tab_veranstaltung
             Where catid='$subcat[id]'
             And status <> 'versteckt'
             Order by sortid LIMIT $eintrag,$zps"
;
$getver mysql_query($sqlbefehl$serverid);
if (
mysql_num_rows($getver) > ) {
while ( 
$ver mysql_fetch_array ($getver )) {
$sqlbefehl"Select b.id,a.artid,a.artpreis
             From $tab_veranstaltung b
             Left join $tab_veropt a on a.verid=b.id
             Where b.id='$ver[id]' order by optpreis asc limit 0,1"
;
$ergebnis  mysql_query($sqlbefehl$serverid);
if (
mysql_num_rows($ergebnis) == 1) {
$ver1mysql_fetch_array ($ergebnis);

 echo 
"ab $ver1[optpreis] Euro
"
; }} 



Alle Zeitangaben in WEZ +2. Es ist jetzt 00:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag