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
"
; }} 


Hussl 03.08.2004 11:30

jetzt ist mir glatt was zum group by eingefallen.

Probiers mal mit diesem Statement:

Code:

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


reichr 03.08.2004 11:33

mmh.. kein ergebnis, keine fehlermeldung

Hussl 03.08.2004 11:36

:mad2:

Sowas ist ja zum Auszucken. Aber sorry, das Problem ist, dass ich mich mit PHP/MySql nicht sonderlich gut auskenne. Kann dir jetzt leider auch nicht mehr weiterhelfen... Bin mit meinem Latein am Ende.

Hussl 03.08.2004 11:51

Ich wills einfach nicht hinnehmen, dass das nicht geht :D

Wenn du eigentlich nur den Preis haben willst, reicht es dann nicht, wenn du nur diesen selektierst?

Code:

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


reichr 03.08.2004 11:55

Zitat:

Original geschrieben von Hussl
Ich wills einfach nicht hinnehmen, dass das nicht geht :D

Wenn du eigentlich nur den Preis haben willst, reicht es dann nicht, wenn du nur diesen selektierst?

Code:

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


schön wärs!
bringt aber nix da ich dadurch wieder die gleichen ergebnisse bekommen würde da ich ja mehr preise habe!
von dem abgesehen tut sich bei dieser abfrage genauso wenig..
kein ergebnis, kein fehler.. :heul:

Hussl 03.08.2004 11:59

Mhh, kann es nicht vielleicht sein, dass da der Hund wo anders begraben liegt? Glaub nicht, dass das SQL-Statement falsch ist, da ich keinen Fehler entdecken kann.

Kannst du mir mal das Skript schicken? Vielleicht kann man da was sehen...

reichr 03.08.2004 12:03

tjo.. des is jo im grund des ganze script dafür...
und das andere is eben nur die schleife die mir die
überschriften ausgibt und zwar so


-----------
lalala


-----------
lalala


-----------
lalala

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
"
; }} 


Hussl 03.08.2004 12:07

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
"
; }} 

Siehe Pfeile!

reichr 03.08.2004 12:30

mmh.. ideen hast ja viel..
leider nein .. :confused:

Hussl 03.08.2004 12:43

Ich probiers gern nach der try-and-error-methode :D

Aber jetzt geb ich endgültig auf. sag aber bitte bescheid, wennst dus hast...


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

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