• Super User

    Domanda per comando "WHERE"

    Salve,
    in pratica avrei bisogno di creare una query che scelga alcune righe dal MySQL in base a più criteri... nel senso:

    [php]
    $query=mysql_query("SELECT * FROM my_table WHERE id='1' or '2'");
    [/php]

    in pratica avrei bisogno che selezionasse le righe dove l'id è uguale a 1 O 2... come posso fare?


  • User

    SELECT * FROM my_table WHERE id='1' AND id='2'

    :ciauz:


  • Super User

    posso anche usare il comando OR oltre che AND? Perchè sarà difficcile che una riga abbia un id con 2 valori 😉


  • User

    Scusami tanto,
    mi sono rimbecillito per un momento, cmq non e che puoi, ma DEVI usare OR.

    Grazie 😉


  • Super User

    Si ma così trova un solo risultato... nonostante io abbia specificatamente impostato LIMIT 3... comunque il problema è che io ho un ciclo for:

    [php]
    for($fids=0; $fids < $limit; $fids++, $fid--)
    {
    $ids = "id='" . $fid . "' or " ;
    print $ids;
    }
    [/php]

    che da come risultato (ad esempio)
    id='6' or id='5' or id='4' or

    questo valore viene poi riportato nella query

    $sql=mysql_query("SELECT * FROM news WHERE " . $ids . " id='7' ORDER BY time Desc LIMIT " . $limit . " ") or die ("Query error: " . mysql_error());

    ho dovuto aggiungere id='7' per chiudere l'ultimo or.

    Domanda:

    1. Come faccio a troncare l'ultimo or in modo che sia ...'id'=4 invece di ...id=4 or

    2. Come faccio a fare in modo che selezioni più di una riga?


  • User

    Così al volo ti faccio un esempio di come mettere gli or fino a quando non ci troviamo all'ultimo ciclo di for

    esempio:
    [php]
    for($fids=0; $fids < $limit; $fids++, $fid--)
    {
    $ids = "id='" . $fid;
    if($fids < ($limit-1))
    $ids =. "' or " ;
    print $ids;
    }
    [/php]


  • Super User

    OK quello l'ho risolto 🙂 ora sto lavorando in modo che quando clicca su next procede a prevelare i 3 id dopo l'ultimo usato e viceversa. Esempio: se in questo momento sono visualzizate le news con id: 1, 2, 3 cliccando su next si passerà a quelle con id 4, 5, 6 e vorrei che se si cliccasse su previous si ri-vedesse 1, 2, 3 sto usando questo codice:
    [php]
    //il problema è in questa parte (dove $_GET["state" == 1)
    if($_GET["state"] == 1)
    {
    for($fids=0; $fids < $limit; $fids++, $fid--)
    {
    if($fid == 0)
    {
    $fid++;
    }
    $ids = "id='" . $fid . "' or " ;
    print $ids;

    }
    }
    if($_GET["state"] == 2)
    {
    for($fids=0; $fids < $limit; $fids++, $fid++)
    {
    if($fid == 0)
    {
    $fid++;
    }
    $ids = "id='" . $fid . "' or " ;
    print $ids;

    }
    }
    [/php](1= Precedente, 2=Prossimo) funziona bene la seconda parte ($_GET["state"] == 2. Però se ad esempio $ids è:

    id='4' or id='5' or id='6' or

    se clicco su previous

    mi viene

    id='7' or id='6' or id='5' or

    :mmm: come mai?