Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Problemi con estrazione dati da MySQL e visualizzazione degli stessi

    ciao a tutti sono nuovo del forum, avrei un quesito per chi di voi mi sappia gentilmente aiutare.

    Sto cercando di fare una cosa abbastanza semplice credo ovvero una paginetta php che mi restituisca a video certi valori presi da un DB SQL.

    fin qui tutto semplice ho fatto lo script (vallo a chiamare script le 5 righe di codice eheh) e funziona vi posto il tutto:

    codice PHP:
    codice:
    <?
    $query =query("    
            SELECT client_name, client_id, client_points
            FROM client_table
            ORDER BY client_id
        ");
    
    ?>
    
    <?
    while($row=mysql_fetch_array($query)){
    
    echo "Nome: ".$row[client_name];
    
    echo "
    ";
    
    echo "ID Client: ".$row[client_id];
    
    echo "
    ";
    
    echo "Punti: ".$row[client_points];
    
    echo "
    ";
    
    echo "
    ";
    
    }
    ?>

    questo funziona pefettamente infatti a video vedo es:
    Nome: pinco
    ID:3
    Punti: 50

    ora vi spiego i miei problemi:
    il primo grande problema e' che vorrei anzichè visualizzare l'id del client vorrei si visualizzasse quello a cui effettivamente corrisponde, vi spiego meglio abbiamo circa 15 categorie (best, good, nice, newbie ecc, e ognuna di queste categorie sono associate ad un ID quindi volevo far in modo che ad esempio all'ID 15 corrispondesse a video "Newbie" e non 15 come vi ho mostrato sopra nell'esempio)

    Penso che il codice da utilizzare sia simile a questo :
    codice PHP:
    codice:
    if (client_id=="15")
      echo "Newbie";

    ma non so proprio come piazzarlo ne se sia giusto visto che onestamente ho provato a scopiazzare la cosa dal jython (e oltre a piazzarne uno non so come/dove poi proseguire e piazzarne altri 14 per gli altri client_ID).
    Questo il primo problema.

    Il secondo e' ancora piu stupido ma perdonatemi non sono molto bravo in php come detto.
    allora come vedete nel codice ho usato l'istruzione ORDER BY client_id, volevo sapere se gli si poteva dare un altra istruzione secondaria da seguire ma che fosse sempre valida ovvero ORDINA PER IL CLIENT ID e dopo ORDINA SEGUENDO I PUNTI.
    Cosi ad esempio ordina a grupponi tipo (prima i Best, poi i Good ecc ecc e poi ordina dal primo all'ultimo seguendo i Punti ovvero chi ne ha di piu e' in cima alla classifica di gruppo e ottiene vantaggi a fine settimana).

    ultima cosa e poi non scasso piu anzi che visualizzarli es:
    nome: xxx
    ID: x
    Punti: x

    come posso farli visualizzare cosi:
    codice:

    codice:
    nome: xxx             ID:xx                   Punti:x
    (con proporzioni).



    Scusate ancora le troppe domande e grazie a chiunque risponda ^^
    ah dimenticavo scusate anche gli eventuali strafalcioni XD troppo tardi notte a tutti ^^

    Ethernaly

    Edit: il problema dell'ORDER by l'ho trovato

    DESC e la virgolina per aggiungere una seconda istruzione ^^

    PS spero cosi vada bene se c'e' qualcosa ancora nel title pls editamelo tu XD

  2. #2
    Utente di HTML.it L'avatar di M4rko
    Registrato dal
    Dec 2000
    Messaggi
    619
    Le 15 categorie andrebbero su una tabella a parte, chiamiamola category_table che contiene i campi category_id e category_name, dove category_id farà riferimento a client_id

    Quando fai la query, utilizzi una JOIN per pescare il dato che ti interessa (category_name nel tuo caso)

    codice:
    SELECT
        CL.client_name AS client_name, CL.client_points AS client_points, CL.client_id AS client_id,
        CA.category_name AS category_name
    FROM client_table AS CL
    LEFT JOIN category_table AS CA ON (CL.client_id=CA.category_id)
    ORDER BY CL.client_id ASC, CL.client_points DESC
    quando poi fai il fetch dei risultati, in $row['category_name'] trovi il dato che ti interessa

    Tutti hanno bisogno di credere in qualcosa.
    Io credo che mi farò un'altra birra.


  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    509
    posso approffittare dato che ho un problema simile anche se la query è un po più lunga? mi ci sto perdendo

    codice:
    SELECT  cat.cat_id AS id,cat.pos AS pos,cat.titolo AS titolo,op.nome AS operatore,
    stag.stag AS stagione,city.nome AS regione,cat.scad AS scadenza 
    FROM `cataloghi` AS cat,`paes_region`AS city ,`operator` AS op,`stagione`AS stag 
    LEFT JOIN paes_region ON (cataloghi.region=city.id ) 
    WHERE cat.operat = op.op_id AND cat.stag=stag_id 
    AND paes_region.nome  LIKE '% abano %'
    in pratica una tabella centrale dove setto gli id più altre 3 tabelle dove trovo gli id e i valori corrispondenti. ho provato a mettere giu un solo join per iniziare.. ma continua a presentarsi un errore(quello in grassetto) dicendomi che non trova la colonna. dato che ho usato gli alias ho provato a mettere cat.region ma nulla...
    mi sta venendo il dubbio che devo recueprare anche i volari di quella colonna...ù

    nulla ho provato a fare delle modifiche su quello che ho scritto...ma mi dice sempre
    #1054 - Unknown column 'cataloghi.region' in 'on clause'

    e si che la sintassi dovrebbe essere piu o meno questa...dove sbaglio?
    SELECT * FROM t1 LEFT JOIN (t2, t3, t4)
    ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c)

  4. #4
    quindi se non ho capito male:
    1)Creo una tabella SQL tipo:
    codice:
    CREATE TABLE IF NOT EXISTS `category_table`(
      `category_id` DECIMAL(2),
      `category_name` VARCHAR(45) NOT NULL default '',
      PRIMARY KEY (`category_id`)
    );
    
    INSERT INTO category_table VALUES
    (1,`Best`),
    (2,`So Good`),
    (3,'Good`),
    (4,`Newbie`);
    <---ovviamente con 15 entries

    Poi modifico il mio codice PHP cosi:
    codice:
    <?
    $query =query("	
    		SELECT
                CL.client_name AS client_name, CL.client_points AS client_points, CL.client_id AS client_id,
                CA.category_name AS category_name
                FROM client_table AS CL
                LEFT JOIN category_table AS CA ON (CL.client_id=CA.category_id)
                ORDER BY CL.client_id ASC, CL.client_points DESC
    	");
    
    ?>
    
    <?
    while($row=mysql_fetch_array($query)){
    
    echo "Nome: ".$row[client_name];
    
    echo "     CATEGORIA: ".$row[category_name];
    
    echo "
    ";
    
    echo "
    ";
    
    }
    ?>
    Domanda nel FROM client_table AS CL per cosa sta AS e CL? sono due funzioni del PHP?

    Grazie mille Per le risposte!!!

    Ethernaly




    EDIT:
    non funzionava ho provato a ragionarci su e ho visto che mancava una cosa nella dichiarazione della query SQL:
    codice:
    , CA.category_id AS category_id
    dopo questo-->
    codice:
    CA.category_name AS category_name
    grazie mille davvero ^^ se hai voglia di risp mi diresti solo perche' si usa AS (che penso associ il record ad un nome "fittizio" tipo il record nella colonna C lo associ a x.C) e perche' hai usato CL e CA? (sono nomi a caso ovvero potevo usare MM ed NN ad esempio?)

    Grazie mille!

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    509
    si AS serve per attribuire un nome fittizio alla tabella o al campo.

    penso che CA intendesse un abbreviazione di category e CL come clienti

    i nomi che io sappia possono essere messi a caso, logico che servono per aiutarti..se ti complicano la vita cambiali.

    perchè dici che non ti funzionava? teoricamente dovrebbe funzionare salvo che tu non abbia l'errore che avevo io su colonne non riconosciute o nomi fittizzi non unici.

    la query prevederebbe che tu abbia due tabelle
    una chiamata
    client_table che contiene i campi client_name,client_points,client_id

    la seconda
    category_table con i campi category_id e category_name

    quando esegui la query la risultante sarà

    client_name | client_points | client_id |category_name |

    dove category name è popolato con i valori di category_table.category_name in base alla conincidenza tra client_id e category_id

    che errore ti da?

  6. #6
    mi dava problemi con il CA.category_id

    penso perche' qui non era dichiarato :

    Codice PHP:
    <?
    $query 
    =query("    
            SELECT
                CL.client_name AS client_name, CL.client_points AS client_points, CL.client_id AS client_id,
                CA.category_name AS category_name
                FROM client_table AS CL
                LEFT JOIN category_table AS CA ON (CL.client_id=CA.category_id)
                ORDER BY CL.client_id ASC, CL.client_points DESC
        "
    );
    allora ho aggiunto queste due righette:
    , CA.category_id AS category_id


    ed e' andato (quindi penso perche' non era dichiarata nella query).


    Tu sai per caso come mettere una riga sepraratrice (o un immagine) dopo ogni salto di categoria? ti spiego ad esempio fare in modo che anzi che visualizzi cosi :

    nome: gg categoria: good
    nome: xx categoria: good
    nome: ss categoria: best

    visualizzi tipo cosi:
    nome: gg categoria: good
    nome: xx categoria: good
    -----------------------------------
    nome: ss categoria: best
    -----------------------------------

    Grazie ancora ^^

    Ethernaly

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    509
    l'unica cosa che mi viene in mente a quest'ora è avere una query per contare le singole categorie e quando un ipotetico $x è uguale al conteggio di quella categoria stampa a video qualcosa.
    ma contare le singole categorie vuol dire ripetere la query quindi non so sia la soluzione migliore...

    oppure

    Codice PHP:
    $y="0";
    while(
    $row=mysql_fetch_array($query)){
    echo 
    "[b]Nome:[/b] ".$row[client_name]."     [b]CATEGORIA:[/b] ".$row[category_name];
    echo 
    "
    "
    ;
    //verifica se è il primo cilco, nel caso attribuisce ad $x il valore della categoria
    if($y=="0"){$x=$row[category_name]}
    $y="1";
    //verifica se $x è diverso dal valore attuale di categoria. se è diverso stampa una riga e va a capo
    if ($x!=$row[category_name]){echo"----------------------------
    "
    ;}
    //assegna il valore di questa nuova categoria ad $x 
    $x=$row[category_name];

    la sto buttando un po giu cosi, provala...
    in teoria il primo ciclo se categoria è good Y fa settare x a good
    al secondo ciclo se categoria è ancora good riassegna ad $x good
    ma se invece è better allora $x(che prima era good) è diverso e quindi stampa a video una riga.
    a quel punto assegna ad $x better e avanti cosi...

    al posto di ------------------- puoi usare <hr> e magari gli imposti un paio di variabili per ridurne la lunghezza

    prova non so se funzioni..

    in teoria

  8. #8
    forse ho sbagliato qualcosa vista l'ora ma non mi va

    Ps una cosa importante che forse non ho detto che le mie categorie per esigenza partono dal numero 88 fino al 118 (ovvero 30 categorie).

    Ethernaly

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    509
    non dovrebbe essere un problema..in teoria funziona per qualunque numero di categorie

    non so che errore ti dia ma l'importante è la sequenza con cui metti le variabili..

    che errore ti da?
    prova a mandare in stampa $row[category_name] prima e dopo l'assegnazione di $x
    in questo mod vedi se c'è qualche problema o se le aggiunte non vanno..
    in teoria $x prima dell'assegnazione dovrebbe avere il valore precendente,
    quindi se category_name ha un voler e poi un altro allora dovresti trovarli entrambi..

    se è cosi ma non stampa la riga probabilmente scrivere != nella condizione non va bene ma va usato altro

    se per errore non hai riportato $y=1 dopo la condizione if($y==0) $y rimane sempre a zero e quindi $x viene riassegnato prima di poter fare il controllo. rendendo tutto inutile

  10. #10
    Codice PHP:
    <?
    $query 
    =query("    
            SELECT
                CL.client_name AS client_name, CL.client_points AS client_points, CL.client_id AS client_id,
                CA.category_name AS category_name, CA.category_id AS category_id
                FROM client_table AS CL
                LEFT JOIN category_table AS CA ON (CL.client_id=CA.category_id)
                ORDER BY CL.client_id ASC, CL.client_points DESC
        "
    );

    ?>

    <?
    $y
    ="0";
    while(
    $row=mysql_fetch_array($query)){
    echo 
    "[b]Nome:[/b] ".$row[client_name]."     [b]CATEGORIA:[/b] ".$row[category_name];
    echo 
    "
    "
    ;
    //verifica se è il primo cilco, nel caso attribuisce ad $x il valore della categoria
    if($y=="0"){$x=$row[category_name]}
    $y="1";
    //verifica se $x è diverso dal valore attuale di categoria. se è diverso stampa una riga e va a capo
    if ($x!=$row[category_name]){echo"----------------------------
    "
    ;}
    //assegna il valore di questa nuova categoria ad $x
    $x=$row[category_name];
    }
    ?>
    cosi dovrebbe andare?

    perche' il problema che non mi segna errori ma mi da pagina bianca :|

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.