Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Problemi con query (IN)

    Ciao a tutti..

    ho riscontrato un problema con una query.
    Partiamo dalla tabella

    Table gruppi
    -----------
    id_gruppo
    list_users

    In list_users è contenuto un elenco di utenti separati da virgola.
    Ora io ho la necessità di sapere se tra tutti i record di questa tabella c'è un valore x all'interno di list_users.

    Ora in list_users c'è un campo che contiene i valori 2,4,109,304

    La mia query è la seguente.

    SELECT * FROM table WHERE $varguest IN (list_users)
    con $varguest = 109;

    Faccio delle prove per capire dove sta l'errore e vedo che...
    con la disposizione 2,4,109... il valore 109 non viene individuato

    Se invece metto 109,2,4... il valore 109 restituisce un risultato positivo.
    Io ho però bisogno di cercare tra tutti i list_users andando a vedere tra le virgole se esiste questo valore.
    E' necessario usare LIKE?
    "La grandezza dell'uomo si misura in base a quel che cerca e all'insistenza con cui egli resta alla ricerca".

  2. #2
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    devi usare INSTR:
    "INSTR(str,substr)
    Returns the position of the first occurrence of substring substr in string str. This is the same as the two-argument form of LOCATE(), except that the arguments are swapped.

    mysql> SELECT INSTR('foobarbar', 'bar');
    -> 4
    mysql> SELECT INSTR('xbar', 'foobar');
    -> 0

    This function is multi-byte safe. In MySQL 3.23, this function is case sensitive. For 4.0 on, it is case sensitive only if either argument is a binary string."

    http://dev.mysql.com/doc/mysql/en/St...s.html#IDX1274

    think simple think ringo

  3. #3
    Scusami, ma credo di non aver compreso il suo utilizzo.
    C'è una stringa in un campo del db, che contiene dei valori separati da virgola

    es.
    rec1 34,56,77,456,32
    rec2 67,43,89,123,78



    Come dovrei usare INSTR in modo da sapere in quali record è presente il valore 56??
    "La grandezza dell'uomo si misura in base a quel che cerca e all'insistenza con cui egli resta alla ricerca".

  4. #4
    Utente di HTML.it L'avatar di quincy
    Registrato dal
    Aug 2003
    Messaggi
    247
    Se i valori numeri sono formattati come hai scritto ossia:
    ,12,56,556,1556,
    Per sapere se il record contiene il valore 56 basta che fai uso del like in questo modo:
    select * from tabella where record like '%,56,%'
    In tale modo ti ricava i record con 56 e non con 556 o 1556.
    Le virgole o altro segno di formattazione sono importanti per non ottenere risultati errati.


    Ciao.
    Andrea

  5. #5
    e infatti si torna a like.
    Ma bisogna stare attenti ai casi in cui il valore è primo o ultimo. Perché in quel caso ,$valore, non andrebbe bene.

    L'idea potrebbe essere quella di mettere già le virgole all'inizio e alla fine della stringa. Quando poi mi ritrovo a richiamare dei dati (ad es. SELECT * WHERE $id IN (elenco)... farò prima una trasformazione..

    $listasenzavirgola = substr ($r[users], 1, -1);

    Pensavo esistesse una modalità alternativa a Like.
    "La grandezza dell'uomo si misura in base a quel che cerca e all'insistenza con cui egli resta alla ricerca".

  6. #6
    Utente di HTML.it L'avatar di quincy
    Registrato dal
    Aug 2003
    Messaggi
    247
    Se i dati sono formattati come ti ho indicato il primo o l'ultimo non fà differenza!
    Ovvio che per distinguere 56 da 156 devi mettere un carattere delimitatore come appunto la ,o # e questo deve sempre comparire tra due numeri!
    EX.

    #56#556#1556#
    Ciao
    Andrea

  7. #7
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Hai provato a mettere uno spazio dopo la virgola ?

  8. #8
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    codice:
    SELECT '2,4,159,304,43,102' REGEXP '^(.*)(,59)(.*)';

    think simple think ringo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.