SQL - Bekomme keine Auswahl

ciberjoerg

Erfahrenes Mitglied
Ich möchte eine DB abfrage machen in der zwischen abgefragt werden soll ob ein Eintrag zwischen zwei Werten ist.
Bsp zeit in time()

$aktiv = time()-600;
$inaktiv = time()-1800;

Jetzt die Abfrage:
PHP:
<?php
$ain_user = "SELECT
    fl.an_id AS friend_id,
    fl.time
FROM
    flist AS fl
WHERE
    fl.status = '2'
    AND
    fl.von_id = '{$user}'
UNION SELECT
    fl.von_id AS friend_id,
    fl.time
FROM
    flist AS fl
WHERE
    fl.status = '2' AND
    fl.an_id = '{$user}'
ORDER BY
    time
";
$erinu = mysql_query($ain_user)or die(mysql_error());
while($r_uina = mysql_fetch_object($erinu))
    {
        $fin_id = $r_uina ->friend_id;
        
        $abuin = "SELECT * FROM u_on WHERE id = '$fin_id' AND last_act >='$inaktiv' AND last_act <='$aktiv' ";
    $eruin = mysql_query($abuin)or die(mysql_error());
    while($r_uin = mysql_fetch_object($eruin))
    {
        $in_user_id = $r_uin->user_id;
        $in_user = $r_uin->user_nic;
        echo "<img src='images/square_16_dis.png' alt='User Inaktiv' width='10' height='10' border='0'>";
        $abGesch2 = "SELECT * FROM fa_pass0_data WHERE user_id = '$in_user_id' ";
    $erGesch2 = @mysql_query($abGesch2)or die(mysql_error());
    while($rgesch2 = mysql_fetch_object($erGesch2))
    {
        $sex2= $rgesch2->sex;
        if($sex2 == M){
                            echo "<img src=\"http://www.tutorials.de/forum/images/maennlich.png\" width=\"10\" height=\"10\"> ";
                        }
                        else{
                        };
                        if($sex2 == W){
                            echo "<img src=\"http://www.tutorials.de/forum/images/weiblich.png\" width=\"10\" height=\"10\"> ";
                        }
                        else{
                        };
                        
    }
        echo "<a href='public_profil.php?user_id=".$in_user_id."' target='_top'>".$in_user."</a><br>";
    }
    }

Warum wird mir nichts Ausgegeben, obwohl mind. eine Abfrage vorhanden sein muss.
 
Zuletzt bearbeitet:
Was für ein Feldtype hat u_on.last_act?
Laut deinem SQL müsste es ein String sein, der aber ein Unix-Timestamp enthält.

Wenn das Feld eine Nummer ist, musst du die ' ' weglassen. Wenns ein DateTime, Timestamp etc. ist musst du $inaktiv und $aktiv zuerst konvertieren.


Nebenbei, um abzufragen ob ein Wert zwieschen zwei Werten liegt, gitbs den schönen Befehl BETWEEN
SQL:
last_act  BETWEEN '$inaktiv' AND '$aktiv'
 
Zuletzt bearbeitet von einem Moderator:
Die Tabelle u_on.last_act hat varchar(30).

Die werte Aktiv und Inaktiv haben zahlenwerte die durch time() erzeugt werden.

Hab die abfrage mal geändert aber Kein ergebniss:

PHP:
<?php
$ain_user = "SELECT
    fl.an_id AS friend_id,
    fl.time
FROM
    flist AS fl
WHERE
    fl.status = '2'
    AND
    fl.von_id = '{$user}'
UNION SELECT
    fl.von_id AS friend_id,
    fl.time
FROM
    flist AS fl
WHERE
    fl.status = '2' AND
    fl.an_id = '{$user}'
ORDER BY
    time
";
$erinu = mysql_query($ain_user)or die(mysql_error());
while($r_uina = mysql_fetch_object($erinu))
    {
        $fin_id = $r_uina->friend_id;
        
        $abuin = "SELECT * FROM u_on WHERE id = '$fin_id' AND last_act BETWEEN $aktiv AND $inaktiv";
        $eruin = mysql_query($abuin)or die(mysql_error());
        while($r_uin = mysql_fetch_object($eruin))
        {
            $in_user_id = $r_uin->user_id;
            $in_user = $r_uin->user_nic;
        
            echo "<img src='images/square_16_dis.png' alt='User Inaktiv' width='10' height='10' border='0'>";
        
            $abGesch2 = "SELECT * FROM fa_pass0_data WHERE user_id = '$in_user_id' ";
            $erGesch2 = mysql_query($abGesch2)or die(mysql_error());
            while($rgesch2 = mysql_fetch_object($erGesch2))
            {
                $sex2= $rgesch2->sex;
                if($sex2 == M){
                            echo "<img src=\"images/maennlich.png\" width=\"10\" height=\"10\"> ";
                        }
                        else{
                        };
                        if($sex2 == W){
                            echo "<img src=\"images/weiblich.png\" width=\"10\" height=\"10\"> ";
                        }
                        else{
                        };
                        
            }
                echo "<a href='public_profil.php?user_id=".$in_user_id."' target='_top'>".$in_user."</a><br>";
            }
    }
    ?>
 
Hm...
Kannst du mal direkt nach '$fin_id = $r_uina->friend_id;' ein var_dump auf die 3 Variabeln reinschmeissen und das Resultat hier posten?

PHP:
        $fin_id = $r_uina->friend_id;
        var_dump($fin_id, $aktiv, $inaktiv);
        $abuin = "SELECT * FROM u_on WHERE id = '$fin_id' AND last_act BETWEEN $aktiv AND $inaktiv";

Wenns von den Daten her nicht geheim ist (werden hoffentlich Testdaten sein) noch ein TableDump (Eport über phpMyAdmin inkl CREATE TABLE und INSERTS) mitgibst, dann kann ich das ganze genauer analysieren
 
Was gibt denn
PHP:
echo $ain_user;
aus?
Du könntest mal versuchen, über phpmyadmin die Abfrage direkt im SQL editor zu bearbeiten und mit dem obigen Ergebnis zu vergleichen.
Hilft auch manchmal....

Weil yaslaw eben BETWEEN angesprochen hat fällt mir ein, dass es nicht immer das erste oder letzte Ergebnis mit einschließt. Bei der direkten SQL-Abfrage in PHPmyadmin aber schon. Woran könnte das liegen?

Code:
SELECT * FROM user_test WHERE Mail LIKE '%@%' AND AboNewsletter='1' AND (Nummer BETWEEN '10000' AND '10005') ORDER BY Nummer ASC
Obiger Befehl findet auf der Website nur 10002 bis 10005.
Die SQL-Abfrage in phpmyadmin hineinkopiert aber die user von 10001 bis 10005 findet. Komisch ... :rolleyes:
 
BETWEEN sollte laut MySQL-Handbuch die Grenzwerte miteinschleissen
expr BETWEEN min AND max

Wenn expr größer oder gleich min und expr kleiner oder gleich max ist, gibt BETWEEN 1 zurück, andernfalls 0. Dies ist äquivalent zu dem Ausdruck (min<= expr AND expr<= max), sofern alle Argumente vom selben Typ sind. Andernfalls findet die Typenkonvertierung entsprechend den in Abschnitt 12.1.2, „Typumwandlung bei der Auswertung von Ausdrücken“, beschriebenen Regeln statt, wird aber auf alle drei Argumente angewendet

10001 und 10002 sind Grüssel als der Untere Wert deines BETWEEN (der ist 10000). Also denke ich, das das Problem nicht daran liegen kann.
 
Grüssel? Hab ich das geschrieben - ups...
Grösser!, ja Grösser....

Ich verlass mich leiber auf die Originaldoku von MySQL für MySQL und nicht auf allgemeine SQL-Hilfen....
 
Zurück