Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    343

    inserimento user_id e clienteid con join !

    Ciao a tutti,
    spero che qualcuno possa aiutarmi non cavo ragno dal buco ( neofita join )

    Allora ho creato un db relazionale dove ci sono 5 tabelle

    annunci
    citta
    provincia
    users
    cliente

    Ho creato un'area amministrativa dove ad ogni cliente dovrei associare i propri annunci,
    e se inserisco a mano nella tabella annunci tutto funziona, infatti ad ogni cliente nella sua area si presenta il suo listato annunci e la sua anagrafica, fino qui tutto ok...

    Ora ho creato un form per inviare gli annunci dove c'è una select sia per le provincie sia per le citta' e qui tutto funziona, io vorrei pero' che ad ogni invio si prendesse in automatico
    l'user_id e clienteid ma non capisco davvero come fare, e vorrei evitare di farlo a mano per ogni cliente spero che qualcuno possa aiutarmi, vi posto la tabella annunci con un piccolo dump e lo script e confido in Voi.

    Grazie mille

    Codice PHP:
    -- phpMyAdmin SQL Dump
    -- version 3.3.7
    -- [url]http://www.phpmyadmin.net[/url]
    --
    -- 
    Hostlocalhost
    -- Generato il08 ago2011 at 06:58 AM
    -- Versione MySQL5.1.44
    -- Versione PHP5.3.2

    SET SQL_MODE
    ="NO_AUTO_VALUE_ON_ZERO";


    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;

    --
    -- 
    Database: `sicilia`
    --

    -- --------------------------------------------------------

    --
    -- 
    Struttura della tabella `annunci`
    --

    CREATE TABLE IF NOT EXISTS `annunci` (
      `
    idint(11NOT NULL AUTO_INCREMENT,
      `
    descrizionelongtext NOT NULL,
      `
    mqvarchar(255NOT NULL,
      `
    localivarchar(255NOT NULL,
      `
    prezzovarchar(255NOT NULL,
      `
    tipologiavarchar(255NOT NULL,
      `
    altrovarchar(255NOT NULL,
      `
    annunciodatedate NOT NULL,
      `
    provinciaidint(255NOT NULL,
      `
    user_idint(11NOT NULL,
      `
    cittaidint(11NOT NULL,
      `
    clienteidint(11NOT NULL,
      
    PRIMARY KEY (`id`)
    ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=46 ;

    --
    -- 
    Dump dei dati per la tabella `annunci`
    --

    INSERT INTO `annunci` (`id`, `descrizione`, `mq`, `locali`, `prezzo`, `tipologia`, `altro`, `annunciodate`, `provinciaid`, `user_id`, `cittaid`, `clienteid`) VALUES
    (5'pizza e fichi''100''89''kklkdlslkds''sdnlkdsf''vkldsjfkldsfjlks''2011-08-04'135444),; 
    Script invio annunci

    Codice PHP:
    <?php 
    include 'dbc.php';
    page_protect();


    ?>
    <html>
    <head>
    <title>My Account</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

    <link href="styles.css" rel="stylesheet" type="text/css">
    </head>

    <body>
    <table width="100%" border="0" cellspacing="0" cellpadding="5" class="main">
      <tr> 
        <td colspan="3"></td>
      </tr>
      <tr> 
        <td width="160" valign="top">
    <?php 

    if (isset($_SESSION['user_id'])) {?>
    <div class="myaccount">
      

    [b]My Account[/b]</p>
      [url="myaccount.php"]My Account[/url]

      [url="mysettings.php"]Settings[/url]

        [url="logout.php"]Logout [/url]
        
      

    You can add more links here for users</p></div>
    <?php }
    if (
    checkAdmin()) {

    ?>
          

     [url="admin.php"]Admin CP [/url]</p>
          <?php ?>
          

    </p>
          

    </p>
          

    </p></td>
        <td width="732" valign="top">

    </p>
          <h3 class="titlehdr">Welcome <?php echo $_SESSION['user_name'];?></h3>  
          <?php    
          
    if (isset($_GET['msg'])) {
          echo 
    "<div class=\"error\">$_GET[msg]</div>";
          }
                
          
    ?>
         
          

    This is the my account page</p>
          
             <?php


    $jokelist 
    = @mysql_query

        
    'SELECT * 
        FROM annunci, citta, provincia, cliente WHERE user_id='
    .$_SESSION['user_id'].' AND provinciaid=provincia.id AND cittaid=citta.id AND clienteid=cliente.id ORDER BY `user_id` DESC LIMIT 1 '); 
    if (!
    $jokelist) { 
      exit(
    '

    Error performing query: ' 
    mysql_error() . '</p>'); 


    while (
    $joke mysql_fetch_array($jokelist)) { 

      
    $nome $joke['nome'];
      
    $cognome $joke['cognome'];
      
    $email $joke['email'];

       
      
    // Display the joke with author information 

        
    echo "$nome
    "
    ;
          echo 
    "$cognome
    "
    ;
            echo 
    "[email='$email']$email[/email]";
      
    }  






    ?>


         
          </td>
        <td width="196" valign="top"></td>
      </tr>
      <tr> 
        <td colspan="3"></td>
      </tr>
    </table>

    <?php echo $_SESSION['user_name'];?>








    <?php echo $_SESSION['user_id'];

    require (
    "db_connect.php"); 

    if (isset(
    $_POST['descrizione'])): 
      
    // x un nuovo annuncio usa il form
     


      
    $aid $_POST['aid'];
      
    $cid $_POST['cid'];
      
    $descrizione $_POST['descrizione'];
      
    $mq $_POST['mq'];
      
    $locali $_POST['locali'];
      
    $prezzo $_POST['prezzo'];
      
    $tipologia $_POST['tipologia'];
      
    $altro $_POST['altro'];
      
    $cats $_POST['cats'];
     

      if (
    $aid == '') {
        exit(
    '

    Scegli la provincia x l annuncio. Click "Back" and try again.</p>'
    );
      }

      
    $sql "INSERT INTO annunci SET
          descrizione='
    $descrizione',
          mq='
    $mq',
          locali='
    $locali',
          prezzo='
    $prezzo',
          tipologia='
    $tipologia',
          altro='
    $altro',
          annunciodate=CURDATE(),
          provinciaid='
    $aid',
          cittaid='
    $cid'";
      if (@
    mysql_query($sql)) {
        echo 
    '

    Nuovo annuncio inserito</p>'
    ;
      } else {
        exit(
    '

    Errore aggiunta nuovo annuncio: ' 
    mysql_error() . '</p>');
      }

      
    $jid mysql_insert_id();

      if (isset(
    $_POST['cats'])) {
        
    $cats $_POST['cats'];
      } else {
        
    $cats = array();
      }

      
    $numCats 0;
      foreach (
    $cats as $catID) {
        
    $sql "INSERT IGNORE INTO cittaprovinciauser
                SET annunciid=
    $jid, cittaid=$catID";
        
    $ok = @mysql_query($sql);
        if (
    $ok) {
          
    $numCats $numCats 1;
        } else {
          echo 
    "

    Errore inserimento annuncio 
    $catID: " .
              
    mysql_error() . '</p>';
        }
      }
    ?>



    Annunci aggiunto <?php echo $numCats?> categories.</p>



    [url="<?php echo $_SERVER['PHP_SELF']; ?>"]Aggiungi un nuovo annuncio[/url]</p>


    <a href="search.php">Ritorna alla ricerca/a></p>

    <?php
    else: // inserimento provincia e citta'

      
    $authors = @mysql_query('SELECT id, name FROM provincia');
      if (!
    $authors) {
        exit(
    '

    errore inserimento provincia.</p>'
    );
      }

      
    $cats = @mysql_query('SELECT id, citta FROM citta');
      if (!
    $cats) {
        exit(
    '

    errore inserimento citta.</p>'
    );
      }
    ?>

    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">


    Inserisci annuncio

    descrizione
    <textarea name="descrizione" rows="5" cols="45">
    </textarea></p>
    mq
    <textarea name="mq" rows="5" cols="45">
    </textarea></p>
    locali
    <textarea name="locali" rows="5" cols="45">
    </textarea></p>
    prezzo
    <textarea name="prezzo" rows="5" cols="45">
    </textarea></p>
    tipologia
    <textarea name="tipologia" rows="5" cols="45">
    </textarea></p>
    altro
    <textarea name="altro" rows="5" cols="45">
    </textarea></p>
    </p>



    Provincia:
    <select name="aid" size="1">
      <option selected value="">Seleziona Provincia</option>
      <option value="">---------</option>
    <?php
      
    while ($author mysql_fetch_array($authors)) {
        
    $aid $author['id'];
        
    $aname htmlspecialchars($author['name']);
        echo 
    "<option value='$aid'>$aname</option>\n";
      }
    ?>
    </select></p>


    Citta':
    <select name="cid" size="1">
      <option selected value="">Seleziona Citta'</option>
      <option value="">---------</option>
    <?php
       
    while ($cat mysql_fetch_array($cats)) {
        
    $cid $cat['id'];
        
    $cname htmlspecialchars($cat['citta']);
        echo 
    "<option value='$cid'>$cname</option>\n";
      }
    ?>
    </select></p>



    </p>
    <input type="submit" value="SUBMIT" />
    </form>
    <?php endif; ?>

  2. #2
    Ciao

    prima di pensare alla join io darei un'occhiata approfondita al tuo DDL per creare la tabella, perchè mai ti servono 255 caratteri per la superficie di un immobile?

    perchè tutti gli id numerici sono con segno quando sarebbero tutti interi positivi?

    perchè usi campi di tipo INT quando coprono un range da -2147483648 a +2147483648? (hint, prova a dare un'occhiata qui http://dev.mysql.com/doc/refman/5.0/...ric-types.html )

    perchè al di fuori della chiave primaria non indichi nessun altro indice (ad esempio, per come sono fatti i siti di annunci immobiliari, farei come minimo un indice su mq, locali, prezzo, data, user, città e provincia)

    scusami non ho guardato tutto il resto ma già con la tabella mi è venuto un mezzo infarto

  3. #3
    Utente di HTML.it L'avatar di Ironmax
    Registrato dal
    Dec 2008
    Messaggi
    1,026
    Scusate ma con il motore di database tipo ENGINE=MyISAM, è possibile fare l'operazione di join?

  4. #4
    Originariamente inviato da Ironmax
    Scusate ma con il motore di database tipo ENGINE=MyISAM, è possibile fare l'operazione di join?
    certo, dove sarebbe il problema?

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    343
    U signur il tipico saccente da forum ...

    Ma lei pensa che se noi sapevamo le cose come lei illustrissimon
    Venicamo a chiedere sui forum o ci facevamo i c nostri ?

    Al posto di criticare chi si ammazza il cervello cervando di imparare questo mondo,
    Perche' nn lo aiuta o gli da suggerimenti come la maggior parte
    Degli utenti di un forum ?

  6. #6
    Originariamente inviato da searedone
    U signur il tipico saccente da forum ...

    Ma lei pensa che se noi sapevamo le cose come lei illustrissimon
    Venicamo a chiedere sui forum o ci facevamo i c nostri ?

    Al posto di criticare chi si ammazza il cervello cervando di imparare questo mondo,
    Perche' nn lo aiuta o gli da suggerimenti come la maggior parte
    Degli utenti di un forum ?
    non mi pare di aver criticato, ti ho dato ben 3 punti su cui potresti lavorare, sei libero di accettare i suggerimenti oppure andare per la tua strada ma presto o tardi ti ritornano i problemi moltiplicati per 10 volte.

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    343
    @ Ratatuia

    Io accetto consigli e quant'altro e per questo la ringrazio, mi sono solo infastidito sul fatto che le stava venendo un'infarto ecc ecc...

    Cmq grazie mille per i suggerimenti ma come ho scritto sono 4 giorni che uso la join e tempo fa' un ragazzo sul forum mi aveva spiegato la cosa, ma poi non avevo potuto approfondire
    e penso che in 4 giorni sono stato davvero fin troppo bravo ..

    Tornando ai suggerimenti che intende :
    perchè al di fuori della chiave primaria non indichi nessun altro indice (ad esempio, per come sono fatti i siti di annunci immobiliari, farei come minimo un indice su mq, locali, prezzo, data, user, città e provincia)
    Potrebbe essere più preciso ?!



    perchè tutti gli id numerici sono con segno quando sarebbero tutti interi positivi?
    ?!

  8. #8
    ciao, scusami la franchezza ma qui mancano le basi, io fossi in te mi guarderei bene due concetti chiave prima di pensare alle join

    1. indici: quando poni una clausola WHERE campo = valore MySQL deve scandire tutto il contenuto della tabella per trovare le tuple che che corrispondono a tale criterio. Creando un indice su una colonna, MySQL si salva tutta una serie di informazioni riguardante i valori di quella colonna in maniera tale che quando vai a fare una query con una clausola WHERE su quella colonna la ricerca delle tuple sia notevolmente velocizzata. Questa maggior velocità, benchè poco apprezzabile su tabelle con pochi records, può al contrario fare la differenza su tabelle con molti records. Ovviamente bisogna indicare come indice solo le colonne che veramente servono perchè ad ogni nuovo record inserito nel database MySQL aggiorna le informazioni relative agli indici, quindi se metti indici inutili puoi ottenere l'effetto contrario se hai tabelle che hanno la maggior parte di query di tipo insert, update, delete.

    2. se vai a vedere il link indicato vedrai che i diversi tipi di campo di mysql possono ospitare un range di valori differenti (ad esempio tinyint può ospitare da -127 a +127, se dovessi inserire, per dire, +250 in un campo tinyint verrà registrato comunque +127). Tale range può essere signed (con segno) o unsigned (senza segno, il valore assoluto); nel caso di unsigned, ad esempio, tinyint ha invece un range da 0 a 255. Per l'id di una provincia un campo tinyint unsigned può quindi bastare, per l'id dell'annuncio invece potrebbe fare il caso un mediumint (che in versione unsigned ha come range da 0 a 16777215, direi più che suff). Ovviamente ciascun campo occupa memoria in base al proprio range e indipendentemente dal dato che ci salvi dentro: tinyint occupa di meno di un smallint che occupa di mento in un mediumint ecc ecc. Altrettanto ovviamente se salvi un 10 in un tinyint occuperà meno che salvare un 10 dentro un int poichè la memoria allocata per il campo è fissata dal tipo di campo e non dal contenuto che assegni in ciascun record.

    Una scelta oculata dei tipi di campo ti permette di avere tabelle e indici più contenuti (perchè anche gli indici occupano comunque spazio) e migliori performance nelle ricerche

  9. #9
    Utente di HTML.it L'avatar di Luke70
    Registrato dal
    Jul 1999
    Messaggi
    767
    A parte l'ottimizzazione delle tabelle (condivido quanto dice Ratatuia), tu in realtà non fai degli INNER JOIN: li sostituisci con una query di selezione su una tabella che è la moltiplicazione vettoriale di tutte e quattro le tabelle.
    Se vuoi usare veramente le JOIN devi fare qualcosa del tipo

    SELECT annunci.*,citta.nome,provincia.nome,cliente.nome,c liente.it FROM annunci
    INNER JOIN citta ON annunci.cittaid=citta.id
    INNER JOIN provincia ON annunci.provinciaid=provincia.id
    INNER JOIN cliente ON annunci.clienteid=cliente.id
    WHERE user_id='.$_SESSION['user_id']

    C'è poi la questione della SQL per l'inserimento dei dati la cui sintassi corretta è
    [PHP]INSERT INTO Table1 (Column1, Column2, Column3…) VALUES (Va

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    343
    Ragazzi grazie mille per le spiegazioni, cosi mi è più chiaro un po' questo mondo, chiedo cmq scusa ma oltre ad essere un neofita in php join ecc ecc , io lo faccio per puro divertimento e nient'altro e a tempo perso..

    Quindi abbiate pietà di me

    Cmq volevo dirvi che tutto sommato questa mattina prova e riprova sono riuscito a far prendere l'user_id in automatico cosi:

    Codice PHP:
    $user_id $_POST['user_id'];
      

      
    $aid $_POST['aid'];
      
    $cid $_POST['cid'];
      
    $descrizione $_POST['descrizione'];
      
    $mq $_POST['mq'];
      
    $locali $_POST['locali'];
      
    $prezzo $_POST['prezzo'];
      
    $tipologia $_POST['tipologia'];
      
    $altro $_POST['altro'];
      
    $cats $_POST['cats'];
      
    $clienteid $_POST['clienteid'];
     

      if (
    $aid == '') {
        exit(
    '

    Scegli la provincia x l annuncio. Click "Back" and try again.</p>'
    );
      }

      
    $sql "INSERT INTO annunci SET
          descrizione='
    $descrizione',
          mq='
    $mq',
          locali='
    $locali',
          prezzo='
    $prezzo',
          tipologia='
    $tipologia',
          altro='
    $altro',
          annunciodate=CURDATE(),
          provinciaid='
    $aid',
          cittaid='
    $cid',
          clienteid='
    $clienteid',
          user_id="
    .$_SESSION['user_id'].""
    e per me è già una gran soddisfazione

    L'unica cosa come vedete sto provando a mettere anche il clienteid ma non me lo prende proprio e non capisco come posso fare ...

    ma sopratutto come posso passarlo sempre in automatico nel cliente id del cliente.

    Cavolo nell'area amdmin me lo riconosce ma devo sempre metterlo a maninia

    Lo script e sempre quello sopra che ho postato all'inizio ma se qualcuno a suggerimenti

    GRAZIE MILLE

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.