2016-02-14 18 views
6

Mam dwie tabele w bazie danych moich użytkowników.Wybierz dane z wielu tabel w MySQL przy użyciu pól wyboru i pokaż pole tabeli według pola wyboru

Pierwsza tabela zawiera unikalny identyfikator użytkownika, imię i nazwisko, numer kontaktowy i inne dane osobowe.

Druga tabela zawiera unikalny identyfikator użytkownika z pierwszej tabeli i informacje o urządzeniu, takie jak jego pierwszy numer maszyny, drugi numer maszyny i wiele innych.

Moja tabela nr 2 struktura jest ..

table2

Na stronie raportów, ja pokazuję wszystkie informacje w formie tabeli przy użyciu tej

$sql = "SELECT e.* ,d.* FROM emitra_basic As e INNER JOIN emitra_device as d ON d.uid=e.uid"; 
$result = $conn->query($sql); 

if ($result->num_rows>0) {?> 
      <table ><tr><td> Uid</td><td> Name</td> 
      <td> Micro Atm</td>.......and all column of both tables </tr>        
<?php while($row = $result->fetch_array()) { 
    echo "<td>". $row['uid']. "</td>"; 
    echo "<td>". wordwrap($row['name'],15,"\n",1). "</td>"; ....and all 
    } echo "</table>"; 

to działa dobrze. Ale chcę pokazać spersonalizowany raport. Oznacza to, że chcę podać pole wyboru/przycisk opcji dla użytkownika pola tabeli. Jeśli zaznaczy pole wyboru używa pola, to pokazuje tylko te wartości, które pole wyboru/przycisk opcji są zaznaczone. Lubi, jeśli użytkownik zaznaczy trzy pola wyboru/przycisk radiowy, taki jak Uid, name, m_atm. Pokazuje tylko te informacje z trzech kolumn z obu tabel i widoku tabeli wyświetlania odpowiednio tych kolumn.

+0

Czy trzeba wybierać tej dziedziny poprzez zapytania SQL lub trzeba pokazać tylko wybrane pola? .. Możesz użyć zapytania bez zmian, ale analizuj zapytanie POST/GET z wybranymi kolumnami i wyświetlaj tylko te pola, tj. Nie dotykaj sql, ale zmień widok. – Wizard

Odpowiedz

4

Gdybym undestand ciebie zrobić, że trzeba dodać do ON d.uid=e.uid" coś takiego ON d.uid=e.uid" AND Uid=$id AND name=$name And m_atm=$atm lub dodawać to gdzie (do where I thinght nie jest dobry)

Na przykład

HTML:

<form method="get" action="/a.php"> 
<input type="checkbox" name="check1" value="text1"/> 
<input type="checkbox" name="check2" value="text2"/> 
<input id="submit" onclick="f();return false;" type="button" value="ok"/> 
</form> 

PHP (test.php)

 if(isset($_GET['check1'])) $id=" AND Uid='$_GET[check1]'"; //if is checked first 
if(isset($_GET['check2'])) $name=" AND name='$_GET[check2]'"; //if is checked second 

/* . . . */ 

$sql = "SELECT e.* ,d.* FROM emitra_basic As e INNER JOIN emitra_device as d ON (d.uid=e.uid $id $name)"; 

var_dump($sql); 

JS:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script> 

<script> 
function f() { 
var url; 
var xmlhttp, 

url="/text.php?"+$('form').serialize(); //change text.php 

if (window.XMLHttpRequest) { 
     xmlhttp = new XMLHttpRequest(); 
    } else if (window.ActiveXObject) { 
     xmlhttp = new ActiveXObject('Microsoft.XMLHTTP'); 
    } 
    xmlhttp.open('GET', url, true); 
    xmlhttp.onreadystatechange = function() { 
     if (xmlhttp.readyState == 4) { 
      myfunction(xmlhttp.responseText); 
     } 
    } 
    xmlhttp.send(null); 


    function myfunction(response) { alert(url+' '+response); 
//do something 
    } 
    } 

</script> 

Ten kod PHP jest po prostu, ale można użyć pętli i wartość klucza, aby wyglądać bardziej dobry

Na przykład można użyć <input name=text[]> dla wszystkich elementów ckeckboxes i zrobić

foreach ($_GET['text'] as $key => $value) { 
if($key==0) $key='uid'; else 
if($key==1) $key='name'; else 
if($key==2) $key='m_atm'; 

$q.="$key='$value' AND "; 
} 

$q=substr($q,0,strlen($q)-5); 

$sql2 = "SELECT e.* ,d.* FROM emitra_basic As e INNER JOIN emitra_device as d ON (d.uid=e.uid $q)"; 

var_dump($sql2); 
+0

Chcę wyświetlić tylko te pola, które pole wyboru należy wybrać według użytkownika w formacie tabeli.jak mogę to pokazać – omnath

+0

Piszę do ciebie, wstaw chechboxex na formularzu i przycisku podpunktu i po otrzymaniu pól wyboru zatwierdź aname za pomocą $ _GET lub $ POST i zobacz, czy jest zaznaczone (jeśli isset jest zaznaczone, jeśli nie jest zaznaczone), i jeśli jest ustawiony na warunek "ON", tak jak piszę. Kiedy drukujesz tabelę, na przykład 'if ($ row ['uid'])! = '' Echo" $ wiersz ['uid'] ";' – Michael

+0

Jeśli nie będziesz używał ajaxa, dodaj do pola wyboru 'onclick =" f(); return false; "' i wykonaj w funkcji js 'f()', która prześle dane używając ajax i nie odświeży całej strony – Michael

0

Jeśli chcesz wyświetlić tabelę z dynamiczną kolumną, możesz użyć pętli if....else, jeśli dokładnie znasz liczbę zapytań w kolumnach. Podobnie jak twój problem stworzyłem 2 tabele.Pierwszym z nich jest employee

Eid, nazwisko, adres

A drugi to job

jobid, Eid, postname, Zręcznościowe

Query do pobierania danych wynosi:

$query="SELECT e.Name,e.Address,j.postName,j.Skill FROM employee AS e INNER JOIN job AS j ON e.eId=j.eId";

Dla każdej kolumny jest pole

<input type="checkbox" name="chkName"/> 
<input type="checkbox" name="chkAddress"/>......for all columns. 

GET wartości zostaną porównane z odpowiednimi kolumnami.

Aby pokazać kolumny dynamicznie przy użyciu checkbox do powyższego zapytania:

 $checkArray=array(); 

        if(isset($_GET['chkName'])) 
         $checkArray[0]=1; 
        else 
         $checkArray[0]=0; 
        if(isset($_GET['chkAddress'])) 
         $checkArray[1]=1; 
        else 
         $checkArray[1]=0; 
        if(isset($_GET['chkPost'])) 
         $checkArray[2]=1; 
        else 
         $checkArray[2]=0; 
        if(isset($_GET['chkSkill'])) 
         $checkArray[3]=1; 
        else 
         $checkArray[3]=0; 

       $query="SELECT e.Name,e.Address,j.postName,j.Skill FROM 
employee AS e INNER JOIN job AS j ON e.eId=j.eId"; 

      $result = $con->query($sql); 

     if ($result->num_rows>0) { 
     ?> 
      <table > 
       <tr> 
        <?php 
        if($checkArray[0]==1){ 
        ?> 
         <td> Name</td> 
        <?php 
        } 
         if($checkArray[1]==1){ 
         ?> 
         <td> Address</td> 
          <?php 
         } 
         if($checkArray[2]==1){ 
         ?> 
         <td> Post</td> 
          <?php 
         } 
         if($checkArray[3]==1){ 
         ?> 
         <td>Skioll</td> 
         <?php 
         } 
       ?> 
       </tr>        
    <?php 

     while($row = $result->fetch_array()) { 

       echo "<tr>"; 

       if($checkArray[0]==1) 
       { 
       echo "<td>". $row[0]. "</td>"; 
       } 
       if($checkArray[1]==1) 
       { 
       echo "<td>". $row[1]. "</td>"; 
       } 
       if($checkArray[2]==1) 
       { 
       echo "<td>". $row[2]. "</td>"; 
       } 
       if($checkArray[3]==1) 
       { 
       echo "<td>". $row[3]. "</td>"; 
       } 
       echo "</tr>";   
      } 
0

nadzieję, że pomoże. Tworzenie zmiennej np: $condition i przypisać wartość jak

$condition = ""; 
if($check1) { 
    $condition = " AND Uid=$id"; 
} 
if($check2) { 
    $condition = " AND name=$name"; 
} 

i dołączyć tę zmienną $ warunek w zapytaniu. otrzymasz dynamiczne wartości. Aby pokazać wynik prostą metodą jest zaznaczenie pola wyboru AJAX.

0

Można po prostu użyć pól wyboru w następujący sposób na swojej stronie

mojastrona.html

<form> 
    <input class="form-check" type="checkbox" name="checkName"><label class="form-label">Name</label> 
    <input class="form-check" type="checkbox" name="checkMicroATM"><label class="form-label">MicroATM</label> 
    <!--and so on for each field--> 
</form> 
<div id="dataTable"> 
    <!--Here your table will be displayed--> 
</div> 

myquerypage.php

if($_POST){ 

$sql = "SELECT e.* ,d.* FROM emitra_basic As e INNER JOIN emitra_device as d ON d.uid=e.uid"; 
$result = $conn->query($sql); 

$displayColCount=0; // maintain the count of columns to be displayed 
$displayCol=array(); // contains the database column names to be displayed on the page 

echo '<div id="dataTable">'; // very useful for replacing the content using ajax call if required 

echo '<table>'; 
echo '<tr>'; 
if(isset($_POST['checkName'])){ 
    $displayCol[$displayColCount++]='name'; 
    echo '<th>Name</th>'; 
} 
if(isset($_POST['checkMicroATM'])){ 
    $displayCol[$displayColCount++]='m_atm'; 
    echo '<th>MicroATM</th>'; 
} 
    . 
    . 
    // and so on for each column 
echo '</tr>'; 

while($row = $result->fetch_array()) { 
    echo '<tr>'; 
    $i=0; 
    while($i< $displayColCount){ 
    echo "<td>". $row[displayCol[i++]]. "</td>"; 
    } 
    echo '</tr>'; 
} 
echo '</table>'; 
echo '</div>'; 
} 

można nazwać powyżej strona używająca ajax'a jako

$('.form-check').change(function (e) { 
    var form=this.form; 
    var formData = $('form').serialize(); 
    $.ajax({ 
     type: 'POST', 
     url: 'myquerypage.php', 
     data: formData, 
     cache: false, 
     success: function (html) 
     { 

      $("#dataTable").html(html); 

     }, 
     error: function (xhr, ajaxOptions, thrownError) { 
      alert(xhr.status); 
      alert(thrownError); 
     } 
    }); 
}); 

Mam nadzieję, że ci to pomoże.

0

Myślę, że rozumiem. W tym samym pliku można użyć następującego kodu, ale z oczywistych względów lepiej je rozdzielić.

co mam zrobić, mam listę wyboru opartych na polach, które masz w bazie danych.

Opublikuj te pola i uruchom zapytanie, aby otrzymać dane tylko dla tych pól, które zostały opublikowane.

Po wygenerować kod HTML/tabelę dotyczącą zamieszczonymi pól i danych

<?php 

$result = []; 
$fields = []; 
$dbFields = []; 
$sql = ""; 

$fieldsNameMapping = [ 
    'e.uid' => 'Uid', 
    'd.block' => 'Blocked', 
    'd.m_atm' => 'Atm', 
    'd.uid_name' => 'Name' 
]; 

if (isset($_POST)) { 

    // build query based on the posted fields 
    if (isset($_POST['fields']) && !empty($_POST['fields'])) { 
     $sql = "SELECT "; 

     foreach ($_POST['fields'] as $fieldValue) { 
      $sql .= $fieldValue . ", "; 
      // get field names 
      $fields[] = $fieldsNameMapping[$fieldValue]; 
      // mapping db field names, remove first two characters 
      $dbFields[] = substr($fieldValue, 2); 
     } 

     // remove last comma 
     $sql = substr($sql, 0, -2); 
     $sql .= " FROM emitra_basic As e INNER JOIN emitra_device as d ON d.uid=e.uid"; 
     // get result 
     $result = $conn->query($sql); 

    } 

} 

?> 


<form method="post"> 
    <input type="checkbox" name="fields[]" value="e.uid" />&nbsp;Uid<br /> 
    <input type="checkbox" name="fields[]" value="d.block" />&nbsp;Blocked<br /> 
    <input type="checkbox" name="fields[]" value="d.m_atm" />&nbsp;Atm<br /> 
    <input type="checkbox" name="fields[]" value="d.uid_name" />&nbsp;Name<br /> 
    <input type="submit" value="Show Result" /> 
</form> 

<?php if (!empty($fields)) { ?> 
<table> 
    <thead> 
     <tr> 
     <?php foreach($fields as $fieldName) { ?> 
      <th><?php echo $fieldName ?></th> 
     <?php } ?> 
     </tr> 
    </thead> 
    <?php if (!empty($result) && $result->num_rows > 0) { ?> 
    <tbody> 
    <?php while($row = $result->fetch_array()) { ?> 
     <tr> 
      <?php foreach($dbFields as $fieldDbName) { ?> 
      <td><?php echo $row[$fieldDbName] ?></td> 
      <?php } ?> 
     </tr> 
    <?php } ?> 
    </tbody> 
    <?php } ?> 
</table> 
<?php } ?> 
Powiązane problemy