Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    714

    [MySQL] - Escludere valori pertinenti da una query

    Salve a tutti, ho questa query mysql

    codice:
    select count(m.id) as matchnumber, t.id, t.name, m.roundinfo
    				from tournament as t 
    					join matchlist as m on (m.tournament_id = t.id) 
    				where m.date >= '".date("Y-m-d")."' $where 
    				group by t.id, m.roundinfo
    				order by m.roundinfo asc
    Questo è il risultato:

    Codice PHP:
    Array
    (
        [
    0] => Array
            (
                [
    matchnumber] => 6
                
    [id] => 34
                
    [name_en] => Torneo 1
                
    [roundinfo] => 1
            
    )

        [
    1] => Array
            (
                [
    matchnumber] => 10
                
    [id] => 33
                
    [name_en] => Torneo 2
                
    [roundinfo] => 1
            
    )

        [
    2] => Array
            (
                [
    matchnumber] => 10
                
    [id] => 33
                
    [name_en] => Torneo 2
                
    [roundinfo] => 2
            
    )

    Le mie domande sono:

    1. Volevo mettere matchnumber > di 5 ma mi dice che non esiste la colonna matchnumber
    2. Vorrei avere 1 solo "roundinfo", quindi indice "2" non dovrebbe esserci.

    Grazie,
    Antonio

  2. #2
    group by t.id, m.roundinfo

    se ne vuoi solo uno devi toglierlo dal raggruppamento. Altrimenti ti rendera' un record per ogni coppia di id-roundinfo

    se vuoi "limare" il result set al solo matchnumber > 5 dovresti inserirlo nell'HAVING.

    codice:
    .......
    group by t.id
    HAVING matchnumber > 5
    order by m.roundinfo asc

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

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    714
    Ok per l'HAVING ti ringrazio.
    Il problema e' che se tolgo il raggruppamento per m.roundinfo avro' sicuramente SEMPRE piu' di 5 match, perche' mi fa il count totale tra tutti i round che possono essere anche 38.

    Il group by deve restare cosi, pero' vorrei evitare di estrapolare tutto e ciclarlo con PHP

  4. #4
    Originariamente inviato da Toniello
    Ok per l'HAVING ti ringrazio.
    Il problema e' che se tolgo il raggruppamento per m.roundinfo avro' sicuramente SEMPRE piu' di 5 match, perche' mi fa il count totale tra tutti i round che possono essere anche 38.

    Il group by deve restare cosi, pero' vorrei evitare di estrapolare tutto e ciclarlo con PHP
    qualcosa mi sfugge. un id dovrebbe essere per definizione chiave primaria e quindi unico.

    Group by t.id conta quindi i record della tabella t che hanno riferimento con la tabella m

    Se vuoi il solo m.roundinfo minore prova ad usare MIN(m.roundinfo) raggruppando per m.id invece di t.id

    e' solo tentativo perche' non conosco il tuo progetto.

    codice:
    select count(m.id) as matchnumber, t.id, t.name, MIN(m.roundinfo) as roundinfo
    				from tournament as t 
    				join matchlist as m on (m.tournament_id = t.id) 
    				where m.date >= CURDATE() $where 
    				group by m.id
                                    HAVING matchnumber > 5
    				order by m.roundinfo asc
    puoi anche usare l funzione curdate() invece di date() del php

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

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    714
    Ci siamo quasi,
    il MIN() era esattamente la funzione che mi serviva.

    Questa e' la query che sto utilizzando ora:

    codice:
    select count(m.id) as matchnumber, t.id, t.name_".LANGUAGE.", MIN(m.roundinfo) as roundinfo
    				from tournament as t 
    					join matchlist as m on (m.tournament_id = t.id) 
    				where m.date >= CURDATE() $where 
    				group by t.id
    				HAVING matchnumber > 5
    				order by m.roundinfo asc
    E il risultato che ottengo e':


    codice:
    Array
    (
        [0] => Array
            (
                [matchnumber] => 5
                [id] => 34
                [name_en] => Torneo 1 
                [roundinfo] => 1
            )
    
        [1] => Array
            (
                [matchnumber] => 380
                [id] => 33
                [name_en] => Torneo 2
                [roundinfo] => 1
            )
    )
    Il problema e' che il torneo 2 ha 380 matchnumber che e' la totalita del campionato, mentre dovrebbe resituirmi 10 che e' la totalità del roundinfo 1

    Antonio

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    714
    Potrei togliere il COUNT di matchnumber e ciclare con il php e controllare se roundinfo per la giornata sia > 5 pero' dovrei fare una query ad ogni iterazione del ciclo.

  7. #7
    group by t.id

    ti avevo messo m.id

    comunque potresti provare cosi':

    codice:
    group by t.id, m.roundinfo
    HAVING matchnumber > 5 and MIN(m.roundinfo)
    se da fastidio l'alias con lo stesso nome del campo prova a modicarlo (l'alias).

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

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    714
    No purtroppo non funziona.
    Temo che l'unica soluzione sia ciclare e controllare.

    Tanto una buona scrematura gia ce l'ho.

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.