2016-04-04 11 views
0

Şimdiye kadar yaptığım şeyi kısaca anlatacağım - Öncelikle mağazaların çoğuna sahibim ve her bir mağazanın kendi içinde id, item, qty ve fiyatı ve her mağaza tablosundan alınan toplam qty içeren all_items adlı bir ana tablo var. PHP Beklenildiği gibi çalışmayan birden fazla tabloya katılın

Şimdi her mağaza tablo aynı madde numarası veya yapmadıysanız ya. S1, S2, S3

S1

id item qty price 
1 x1 10 12 
2 x2 10 15 
3 x3 5 5 

S2

id item qty price 
1 x1 10 12 
2 x4 6 6 

S3: denilen

Mağaza tabloları: Burada tablolar neye benzediğini görebilirsiniz

id item qty price 
1 x3 1 5 
2 x6 5 5 
3 x7 5 12 

ALL_ITEMS-orijinal toplam qty İçeriyor

id item qty price 
1 x1 20 12 
2 x2 10 15 
3 x3 6 5 
4 x4 6 6 
5 x6 5 5 
6 x7 5 12 

Tamam şimdi, şu gibi amaçlı- karşılaştırmak için tüm mağazalarda her öğe için kullanılabilir qty öğrenmek için karar verdik:

item price S1 S2 S3 
x1 12 10 10 - 
x2 15 10 - - 
x3 5  5 - 5 
x4 6  - 6 - 
x6 5  - - 5 
x7 12 - - 5 

Şimdi senin için berrak umuyoruz. eğer Şimdi

$allstore = $_POST['store']; //Collects name from checkbox ticks under form 


function createSelect($allstore) 
{ 
    if (empty($allstore)) 
     return ""; 

    $querySelect = ""; 
    $queryJoin = ""; 
    $baseTable = ""; 
    foreach ($allstore as $store => $value) { 
     if (!$querySelect) { 
      $baseTable = "all_items"; 
      $querySelect = "SELECT " . $store . ".item_no, " . $store . ".actual_price, " . $store . ".selling_price, " . $store . ".qty as " . $store; 
     } else { 
      $querySelect .= ", " . $store . ".qty as " . $store; 
      $queryJoin .= " 
      INNER JOIN " . $store . " ON " . $baseTable . ".item_no = " . $store . ".item_no"; 
     } 
    } 
    $querySelect .= " FROM " . $baseTable; 
    $query = $querySelect . $queryJoin; 

    return $query; 
} 


$allstore = array(); // The below code allows function to know how many stores selected in $allstore 
if (!empty($_POST['store'])) { 
    foreach ($_POST['store'] as $value) { 
     $allstore["s_".$value] = 0; // or 1, it doesn't matter because your function adds all the keys 
    } 
} 

var_dump(createSelect($allstore)); // Output SQL 

$query = (createSelect($allstore)); 
$result = mysql_query($query); 
//Rest of the code ..... 

: Bir PHP sayfası aşağıdaki kodu içeren - Ben kullanıcı o karşılaştırmak istiyor, bu yüzden formu gönderdikten sonra saklayan seçmek izin vermek (her mağaza için) onay kutusu giriş tipi ile bir form oluşturduk Not $baseTable = "all_items";, tüm sorguyu başarısız yapar. Ben $baseTable = $store; için o değeri değiştirirseniz çıkıyor S1 şimdi ana ve sadece S1 öğeler üzerinde röleleri çünkü sonuç tamamen farklı olacak çünkü Ancak nasıl çalıştığını ve bir çıkış gösterir ama beklendiği gibi değil.

Herhangi bir yardımcı çözüm sunabiliyorsanız takdir edilecektir.

cevap

0

Neden UNION kullanamazsınız? Kodunuzdaki Bir mysqli hata alıyorum `-mysql_fetch_assoc() 'e göre Cevabınız için

function createSelect($stores) 
{ 
    $query = ""; 
    $baseTable = "all_items"; 
    foreach($stores as $i => $store) 
    { 
     $query .= "(SELECT {$store}.id AS {$store}_id, {$store}.item AS {$store}_item, {$store}.price AS {$store}_price, {$store}.qty AS {$store}_qty, '{$store}' as Source FROM {$store}) UNION "; 
    } 
    $query .= "(SELECT all_items.id AS {$baseTable}_id, {$baseTable}.item AS {$baseTable}_item, {$baseTable}.price AS {$baseTable}_price, {$baseTable}.qty AS {$baseTable}_qty, '{$baseTable}' as Source FROM {$baseTable})"; 
    return $query; 
} 

$result = mysql_query(createSelect($allStore)); 
//Rest of code 
//if my tables are S1, S1, and my $baseTable is bs 
//echo createSelect(array('S1', 'S2'); will output (SELECT S1.id AS S1_id, S1.item AS S1_item, S1.price AS S1_price, S1.qty AS S1_qty, 'S1' as Source FROM S1) UNION (SELECT S2.id AS S2_id, S2.item AS S2_item, S2.price AS S2_price, S2.qty AS S2_qty, 'S2' as Source FROM S2) UNION (SELECT all_items.id AS all_items_id, all_items.item AS all_items_item, all_items.price AS all_items_price, all_items.qty AS all_items_qty, 'all_items' as Source FROM all_items) 
+0

sayesinde parametre 1 kaynak olmasını beklediğini, boolean given' –

+0

Onun bunun için bir çözüm bulma umutsuz görünüyor. –

+0

Ben sonunda davanızı çoğaltılmış ve iyi iş gibi görünüyor. Sütun adlarının ve tablo adlarının sahip olduğunuz öğelere karşılık gelip gelmediğini kontrol edin. Eğer hala devam etmiyorsa, bana bildirin – KBJ

İlgili konular