mysql prob für fortgeschrittene

yester

Active member
ID: 42634
L
8 August 2008
27
0
hi ich habe ein kleines prob und weiß nicht wie ich das am besten lösen kann.

SELECT
*
from
wnw_angebote wnwa,
wnw_werbung wnww ,
wnw_ipsicher wnwi
WHERE wnwa.flaeche=$klauf
and wnwa.status='Ja'
and wnww.status='aktiv'
and wnww.guthaben>wnww.preis
and
(NOT EXISTS(wnwi.ip='".$adr."'
and wnwi.flaeche=$klauf
and wnwi.werbung=wnww.lauf
)) ORDER BY RAND()

so das wäre meines erachtes richtig doch leider stimmt da was nicht
also ich möchte gerne au wnw_angebote.lauf zugreifen wenn
wnwa=fläche und wnwa.status=ja und wnww.status=aktiv und wnww.guthaben>wnww.preis aber

wnwi kein eintrag hat der der aus .ip=$ip und fläche=$fläche und lauf=$lauf besteht

ich hoffe ich konnte da erklären wäre schon wenn einer dazu ne lösung wüsste , irgendwie stehe ich da auf dem schlauch

mfg yester
 
PHP:
SELECT * FROM
 wnw_angebote wnwa,
 wnw_werbung wnww ,
 wnw_ipsicher wnwi 
 WHERE  wnwa.flaeche=$klauf 
 AND wnwa.status='Ja' 
 AND wnww.status='aktiv' 
 AND wnww.guthaben>wnww.preis 
 AND NOT (wnwi.ip ='".$adr."' 
   AND wnwi.flaeche=$klauf 
   AND  wnwi.werbung=wnww.lauf
 )
 ORDER BY RAND()

Ich denke mal, das ist es was Du meinst.

mfg
 
PHP:
SELECT * FROM
 wnw_angebote wnwa,
 wnw_werbung wnww ,
 wnw_ipsicher wnwi 
 WHERE  wnwa.flaeche=$klauf 
 AND wnwa.status='Ja' 
 AND wnww.status='aktiv' 
 AND wnww.guthaben>wnww.preis 
 AND NOT (wnwi.ip ='".$adr."' 
   AND wnwi.flaeche=$klauf 
   AND  wnwi.werbung=wnww.lauf
 )
 ORDER BY RAND()

Ich denke mal, das ist es was Du meinst.

mfg

sorry aber das ist es auch nicht , das not soll nur heissen das es keinen eintrag in der tabelle wnw_ip gibt der ip=$adr und fläche = $klauf und werbung=wnww.lauf hat
nur dann soll es gehen , leider geht weder not und auch not exisxt

hmm wo ist blos mein fehler...
 
hmm, also da die Abfrage genau das
also ich möchte gerne au wnw_angebote.lauf zugreifen wenn
wnwa=fläche und wnwa.status=ja und wnww.status=aktiv und wnww.guthaben>wnww.preis aber
wnwi kein eintrag hat der der aus .ip=$ip und fläche=$fläche und lauf=$lauf besteht
macht, verstehe ich das wohl falsch. Kannst du das nochmal umformulieren?
 
umbormulieren , hmmm ...

also ich habe eine tabelle die soll mir per zufall eine zeile ausgeben wovon ich wnw_werbung.lauf brauche wenn folgedes ist:


wnw_angebot.flaeche=$klauf
und
wnwa_angebot.status='Ja'
und
wnw_werbung.status='aktiv'
und
wnw_werbung.guthaben>wnw_werbung.preis
und
in der tabelle wnw_ip kein eintrag der wie folgt ist:
wnw_ip.ip='".$adr."'
und
wnw_ip.flaeche=$klauf
und
wnw_ip.werbung=wnw_werbung.lauf

mal sehen ob das nun leichter zu verstehen ist
 
Also, da ich die Tabellen-/Spaltenbeziehungen ja nicht kenne und ich die IP-Verbindung nicht nachvollziehen kann, mal ein Vorschlag, wie es auf jeden Fall funktionieren wird:
1. Abfrage erstellen auf wnw_ipsicher mit auszuschliessenden Kriterien
2. wenn kein Eintrag:
3. Abfrage erstellen für die gewünschte Ausgabe

Damit bekommst Du auf jeden Fall das gewünschte Ergebnis.
 
so habe mal bissel gebastelt...

SELECT * FROM wnw_angebote
LEFT JOIN (wnw_ipsicher,wnw_werbung) ON ( wnw_angebote.werbung = wnw_ipsicher.werbung && wnw_ipsicher.ip = '92.230.195.32' && wnw_ipsicher.flaeche=12
&& wnw_angebote.status = 'ja' && wnw_werbung.status='aktiv' && wnw_werbung.guthaben>wnw_werbung.preis )
WHERE wnw_ipsicher.werbung IS NULL and wnw_angebote.flaeche=12
order by rand()

das geht im phpmyadmin obwohl er schreibt 0 von 0 datensätzen
doch dadrunter tacht dann das gewünsche ergebnis auf.
hmmm was hier denn falsch ?

als php ausgefürt kommt nix...

habs mal angehängt

nen tip was schief läuft ?
 

Anhänge

  • 111.JPG
    111.JPG
    73,9 KB · Aufrufe: 10
Naja wenn das das gewünschte Ergebnis ist bei
&& wnw_werbung.guthaben>wnw_werbung.preis
und beide haben NULL...

Ansonsten mal das * durch COUNT(*) ersetzen.

Wie viele Datensätze hast Du in den Tabellen ?
 
es werden reichlich datensätze werden doch zur zeit erst mal 10 zum testen
ich will aber nur einen nicht count(*)
und die daten haben nicht null denn das sollen sie ja nicht
wie gesagt er zeigt wie in dem anhang an 0-0 aber unten drunter genau was ich brauche....
im php zeigt er das ich 8 zeilen habe aber er gibt nix aus ... hmmmm
hab nen limit 1 angehängt und er zeigt eine zeile doch noch immer keine ausgabe

$werb_an['werbung'] kommt nix bei raus komisch

noch nen tip ??
 
mit COUNT(*) solltest du dir die Anzahl Zeilen ausgeben lassen, die deine Abfrage erfüllen. Lautet das Ergebnis 0, ist die phpMyAdmin-Ausgabe 0 von 0 korrekt. (erste 0: Anzahl angezeigte Datensätze, zweite 0: Anzahl Datensätze die das Kriterium erfüllen).

Die angezeigte Zeile könnte ein Datensatz aus einer Tabelle sein; ein Layout gibt es ja nicht.

Die NULL-Werte entstammen deiner angehängten Grafik.

Naja, ohne das Layout zu kennen wird's schwierig, und ohne Datensätze kannst du wenig testen.
 
hab nochmals mir das bild angesehen 0-0 ( 1 datensatz ) also geht es scheinbar....
hab dann mal limit auf 0 und es kamm als antwort kein datensatz
bei limit 2 kamm auch nur ein datensatz also sollte die abfrage richtig sein....

komisch
mom ich poste mal etwas mehr ...
Code:
$su="SELECT * FROM wnw_angebote 
	LEFT JOIN (wnw_ipsicher,wnw_werbung) ON ( wnw_angebote.werbung = wnw_ipsicher.werbung && wnw_ipsicher.ip = '".$adr."' && wnw_ipsicher.flaeche=".$klauf." 
				&& wnw_angebote.status = 'ja' && wnw_werbung.status='aktiv' && wnw_werbung.guthaben>wnw_werbung.preis  ) 
WHERE wnw_ipsicher.werbung IS NULL and wnw_angebote.flaeche=".$klauf."
order by rand() LIMIT 1";

$werb_an1= db_query ($su);
echo $su;

$anz=mysql_num_rows($werb_an1);
echo$anz;
  if ($anz)
  {

    $a="";
    $werb_an=mysql_fetch_array($werb_an1);
echo "v".$werb_an['werbung']."v";
    $werbe1= db_query ("SELECT * from wnw_werbung  WHERE lauf=".$werb_an['werbung']." and status='aktiv' and guthaben>preis");

    
    if (mysql_num_rows($werbe1))
    {
also die ausgabe $anz zeigt dann 1 an
die ausgabe .$werb_an['werbung'] zeigt leider garnix....

hmmm was mach ich nur falsch ?
 
hi, komisch hatte ich grade gemacht in werbung steht nix aber in feld 4 = werbung , lach
also lasse ich nun feld 4 ausgeben und es geht , :)

erstmal danke für deine hilfe..
mal sehen wann mone mir schreibt .. offtropic
 
Hm, dann liefert Dir mysql_fetch_array() scheinbar nicht wie erwartet sowohl die assoziativen Werte als auch die numerisch indizierten sondern nur letztere. Tipp: Nimm mysql_fetch_assoc(), wenn Du eh nur assoziativ drauf zugreifen willst.