Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19

Discussione: WHERE su molti records

  1. #1

    WHERE su molti records

    Cerco di farvi un esempio per esporvi il problema della mia situazione: poniamo caso che ho una tabella contenenti i records degli utenti iscritti di una comunità. Poi c'è una tabella con degli elementi secondari, ognuno dei quali è collegato ad un utente dei records dell'altra tabella con un campo del tipo proprietario = 'Quentin Tarantino'.
    Ora, c'è una pagina che ha bisogno di certi requisiti per essere eseguita: l'utente che naviga (il cui nome è contenuto nella nm = Session("nome_utente") deve disporre di certi elementi secondari (ognuno hanno un nome predefinito come 'Gino', 'Paolo', 'Pippo' gli elementi secondari... e rimangono gli stessi per ogni utente che acceda). Il problema è che deve controllare se vi sono circa 14 records ognuno con un dato nome (come nome = 'Pippo') e correlazione all'utente (come proprietario = 'Quentin Tarantino'), e non so come fare... finora l'unica soluzione si è dimostrata ripetere la stessa stringa MySQL per ogni records, ma diventa pesante, faticoso e illeggibile (nonché molto scomodo).
    Avevo provato anche con una cosa della serie:
    codice:
    nm = Session("nome_utente")
    sql.Open "SELECT * WHERE elementi_secondari WHERE (nome = 'Pippo' AND proprietario = '"&nm&"') AND (nome = 'Gino' AND proprietario = '"&nm&"') AND (nome = 'Paolo' AND proprietario = '"&nm&"')
    Ma ovviamente non funziona...
    Secondo voi come posso fare?

    Porc le botte

  2. #2
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Devi collegare le due tabelle?
    Usa una INNER JOIN.

    Se è questo il problema...

    Roby

  3. #3
    No, leggi meglio... devo controllare molti records in un tabella, e vorrei farlo in un colpo solo: controllare se l'utente "Quentin Tarantino" ha Gino, Paolo, Pierpaolo; e appunto farlo in un colpo solo.
    Ma la stringa che ho scritto sopra non va bene.
    Porc le botte

  4. #4
    in quella select manca la FROM
    inoltre se proprietario è sempre lo stesso non serve che tu lo ripeta in tutte le clausole. inoltre se il nome può essere luca o mario devi usare una OR, non una AND.

    prova qualcosa tipo:
    codice:
    SELECT * FROM elementi_secondari WHERE proprietario LIKE '" & nm & "' AND (nome LIKE 'luca' OR nome LIKE 'Simo' OR nome LIKE 'Ale')
    xxx

  5. #5
    Sì mio errore di scrittura, nel linguaggio FROM c'è.
    Non capisco bene che differenza possano fare i LIKE, ma provo.
    Porc le botte

  6. #6
    Originariamente inviato da Alethesnake
    in quella select manca la FROM
    inoltre se proprietario è sempre lo stesso non serve che tu lo ripeta in tutte le clausole. inoltre se il nome può essere luca o mario devi usare una OR, non una AND.

    prova qualcosa tipo:
    codice:
    SELECT * FROM elementi_secondari WHERE proprietario LIKE '" & nm & "' AND (nome LIKE 'luca' OR nome LIKE 'Simo' OR nome LIKE 'Ale')
    Aspé... tu hai sbagliato. Nessun OR: deve avere tutti records. Deve verificarli tutti.
    Porc le botte

  7. #7
    Aspé, non ho capito allora come è organizzato il tuo database. prova a postare la struttura della tabella specificando che dati contiene
    xxx

  8. #8
    tabella A
    id (smallint)
    nome (varchar 20)

    tabella B
    id (smallint)
    nome (varchar 20)
    proprietario (varchar 20)

    tabella B contiene oggetti come "Lampada" (nome) associati a utenti come "Paolo" (proprietario).
    C'è una pagina in cui per entrare devi avere certi oggetti, come "Lampada", "Lampadario", "Tappeto", "Scrivania". Così se io sono "Paolo" e entro in quella pagina, deve controllare che nella tabella B ci sia un record contenente nome = 'Lampada' AND proprietario = 'Paolo' e nome = 'Lampadario' AND proprietario = 'Paolo' e nome = 'Tappeto' AND proprietario = 'Paolo' e nome = 'Scrivania' AND proprietario = 'Paolo'.
    Tutto questo vorrei farlo in una sola stringa di connessione a MySQL... cioè, invece che fare:
    codice:
    sql = "SELECT * FROM tabellaB WHERE nome = 'Lampada' AND proprietario = 'Paolo'
    conn.execute sql
    e uguale altri tre sotto per gli altre tre oggetti, farlo in un colpo solo (tutti nella stessa SELECT...WHERE).

    Porc le botte

  9. #9
    prendi spunto da questo

    codice:
    SELECT 
       elenco_campi 
    FROM
       tabella
    WHERE
       campo_utente = 'PAOLO'  AND 
       (campo_oggetto = 'LAMPADA' AND
        campo_oggetto = 'TAVOLO'  AND
        campo_oggetto = 'SNAGURZ')
    se gli oggetti da controllare sono in una lista o in un array la costruzione della stringa sql diventa semplice

  10. #10
    Gli oggetti sono sempre gli stessi 4, non cambiano nome.
    Però all'interno del database hanno una disposizione del tipo:

    1 - Lampada - Paolo
    2 - Lampada Gino
    3 - Lampadario - Paolo
    4 - Scrivania - Stefano
    5 - Scrivania - Gino
    6 - Scrivania - Pingiorgio
    7 - Tappeto - Paolo
    8 - Scrivania - Paolo
    9 - Tappeto - Gino
    ecc ecc

    Qui Paolo li ha tutti e 4. Occorrono tutti e 4 per visualizzare la pagina. Devo quindi, con una sola stringa, accertarmi che Paolo abbia un record con Lampada, uno con Lampadario, uno con Scrivania e uno con Tappeto. Non uso alcun tipo di array o select: i nomi sono testuali e statici nella pagina. Cambia il nome dell'utente, non quello degli oggetti.
    Ora guardo se col tuo codice posso fare qualcosa... per "elenco_campi" cosa intendi (io ho sempre usato * [ALL]) ?

    Porc le botte

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.