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

Discussione: SELECT TABLE

  1. #1

    SELECT TABLE

    come si effettua la selezione tra 2 tabelle quando due campi diversi, della stessa tabella, devono avere lo stesso valore?

    Occorre una query complessa o basta effettuare la query 2 volte selezionando un risultato alla volta?

    questo è per rendere l'idea:
    codice:
    SELECT tabella1.*, tabella2.*
    FROM tabella1, tabella2
    WHERE tabella1.campo1 = '$campo'
    AND tabella1.campo2 = '$campo'
    AND tabella1.campo1 = tabella2.campo
    AND tabella1.campo2 = tabella2.campo
    Spero di ricevere il vostro aiuto....


  2. #2
    codice:
    SELECT *
    FROM tabella1 a
    INNER JOIN tabella2 b ON a.campo1 = b.campo
    WHERE a.campo1 = '$campo'
    AND a.campo1 = a.campo2
    prova... dovrebbe andare.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Originariamente inviato da piero.mac
    codice:
    SELECT *
    FROM tabella1 a
    INNER JOIN tabella2 b ON a.campo1 = b.campo
    WHERE a.campo1 = '$campo'
    AND a.campo1 = a.campo2
    prova... dovrebbe andare.
    No purtroppo niente.

    Provo a spiegarti cosa devo fare....

    Ho sviluppato un prg.ino php di gestione calcistica
    Il problema si è posto con la classifica. inizialmente avevo pensato di creare una tabella apposita che si aggiornava ad ogni inserimento di un nuovo risultato, ma credo sia meglio crearla automaticamente ad ogni richiesta, così non si rischiano problemi futuri.

    La Classifica si creerebbe sulla tabella incontri che è così strutturata:

    idincontro;
    idcategoria;
    idsquadraA;
    idsquadraB;
    (dati relativi incontro blà blà blà)
    golA;
    golB;

    e questa è la mia query di selezione, in questo caso dovrei fare l'operazione inversa, ma non conosco ancora bene tutte lo operazioni con le query....

    $query = "SELECT incontri.*, categorie.*, sq1.*, sq2.*
    FROM incontri, categorie, squadre as sq1, squadre as sq2
    WHERE incontri.idcategoria = '". $idcategoria ."'
    AND incontri.idcategoria = categorie.idcategoria
    AND incontri.idsquadraH = '". $idsquadra ."'
    AND incontri.idsquadraH = sq1.idsquadra
    AND incontri.idsquadraV = sq2.idsquadra";



  4. #4
    dovresti innanzitutto avere la struttura della tabella classifica. Credo che ti convenga farla perche' si tratterebbe di una tabella molto visitata. Un select * e' sempre il piu' efficiente. Se non la vuoi aggiornare record per record, esegui un truncate table e la costruisci ad ogni turno. Una volta definito la query necessaria bastera' eseguirla una volta ogni tanto (ad ogni fine turno) e non ad ogni visita.

    Potresti anche farti una pagina html con la classifica ed evitare tabella e query. Ma prima di tutto devi avere la tabella (db o table html) da riempire altrimenti ... non avrei manco idea di cosa fare.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    io l'avevo impostata sul db, ma poi ho pensato che avrei avuto problemi nel caso in cui avessero inserito un risultato sbagliato, perchè avrei dovuto fare mille calcoli per modificare la tab classifica in virtù di quel risultato modificato.
    Se fosse solo per i gol non ci sarebbe problema, ma dal risultato dipendono tutti i valori pvinte perse, pareggiate, punti...
    e non avendo parametri di confronto con l'incontro, ma solo con l'idsquadra, uscirei un po' pazza perchè dovrei creare in caso di modifica risultato un'infinità di condizioni
    (se golA > vecchi golA aggiorna golA in tab incontri e in tab classifica, ma se golA > vecchi golA && golA < golB....) mi perderei...
    il nuovo risultato potrebbe essere facilmente modificato, ma dovrei poi vedere se la squadra di casa ha vinto o no l'incontro e contro chi giocava, in quel caso dovrei anche modificare tutti gli altri parametri delle due squadre....

    Fare una selezione ad ogni richiesta dici che è dispendioso come tempo di attesa o cosa?

  6. #6
    Originariamente inviato da Defly

    Fare una selezione ad ogni richiesta dici che è dispendioso come tempo di attesa o cosa?
    Direi che potrebbe essere superfluo.

    Imposta la tabella e poi la compili con i dati consolidati. Cioe' la classifica la fai quando finisce il turno degli incontri. Si tratta di fare dei conteggi nella query raggruppando i conteggi per squadra e ordinandoli per totali. Purtroppo non ho idea di cosa sia il calcio... lo ammetto.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Originariamente inviato da piero.mac
    la classifica la fai quando finisce il turno degli incontri. Si tratta di fare dei conteggi nella query raggruppando i conteggi per squadra e ordinandoli per totali.
    l'avevo impostata esattamente così; a fine incontro l'addetto all'aggiornamento inserisce i risultati ed in base a quelli si compila la tabella classifica sommando i vari punti, gol e via dicendo in base all'idsquadra,
    ma se per caso costui dovesse accorgersi di aver sbagliato ad inserire un risultato, come farei ad impostare tutte le condizioni affinchè i dati della classifica vengano ripristinati o aggiornati secondo il nuovo risultato?

    classifica:
    idclassifica
    idcategoria
    idsquadra
    punti
    pgiocate
    pvinte
    pnulle
    pperse
    golfatti
    golsubiti


    credo sia troppo dispersivo in caso di modifica tabella incontri risalire all'incontro e modificare i punti che sono come dici tu tutti conteggi effettuati nel momento in cui inserisco il risultato. Una volta modificato questo non pensi anche tu che dovrei scrivere un codice interminabile?

  8. #8
    In caso di errore di inserimento risultati la classifica viene "TRONCATA" e rifatta ex-novo.

    Non e' pensabile e non avrebbe senso correggere e/o spostare record. Ci vuole piu' tempo a dirlo che a farlo. Errato inserimento?

    1) corregge il/gli inserimenti errati.
    2) TRUNCATE TABLE classifica
    3) Rifare la tabella classifica.

    Oppure se ci sono altre categorie che non devono essere toccate:

    DELETE FROM TABELLA WHERE id_categoria = 'xx'

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    Ah, si!
    Non ci avevo pensato.

    A questo punto però dovrei ricalcolare la classifica della squadraA ad esempio, sulla base di tutti gli incontri che ha avuto sia in casa (quindi come squadraA) che fuori (squadraB) e da qui torniamo alla mia domanda di apertura:

    SELECT incontri.*, squadre.*
    FROM incontri, squadre
    WHERE (incontri.idsquadraA = '$idsquadra'
    OR incontri.idsquadraB = '$idsquadra')
    AND incontri.idsquadraA = squadre.idsquadra
    AND incontri.idsquadraA = incontri.idsquadraB

    ho provato a farla come dici tu, ma non ha funzionato...

    Perdonami se ti sto stressando....


  10. #10
    Non mi stressa manco il gatto che affila le unghie sul divano...

    continuo a non capire a cosa dovrebbe servire quella query che fai...

    Se devi fare una classifica mi aspetterei di vedere dei conteggi...
    codice:
    INSERT INTO tabella .... SELECT ecc 
    
    idclassifica = autoincrement
    idcategoria  = id_della categoria
    idsquadra    = id della squadra
    punti        = SUM(punti)
    pgiocate     = COUNT(giocate)
    pvinte       = COUNT(vinte)
    pnulle       = COUNT(nulle)
    pperse       = COUNT(perse)
    golfatti     = SUM(golfatti)
    golsubiti    = SUM(golsubiti)
    
    from squadre s
    inner join categorie c USING(idcategoria)
    inner join incontri i ON i.idsquadra = s.idsquadra
    WHERE s.idcategoria = '$idcategoria'
    GROUP BY s.idcategoria, s.idsquadra
    ORDER BY punti DESC
    ovvio che la query cosi' fatta non vada, ma e' solo per dare l'idea di cosa dovrebbe fare la query....

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

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.