2016-12-16 16 views
-1

Мне нужно отобразить таблицу, соответствующую значению, выбранному после выбора значения в выпадающем списке. Если я запустил этот запрос в своей SQLPro Studio и, очевидно, без переменной $mr_id, он говорит, что MR_ID неоднозначен. Есть ли способ исправить это? Мне кажется, что это небольшая проблема, но я не могу понять. Мне просто нужно убедиться, что есть пункт WHERE где-то, чтобы он отображал только значения, которые коррелируют с выбранным значением.Фиксация неоднозначной колонки в WHERE Пункт

В таблице указаны только 2 столбца, MR_ID (это то, что отображается в выпадающем списке, а также объединено с другим столбцом не в таблице) и Supp_ID.

<?php 
$host="xxxxxxxxxxxx"; 
$dbName="xxxxx"; 
$dbUser="xxxxxxxx"; 
$dbPass="xxxxxxxxxxxxxx"; 

$mr_id = $_POST['mr_id']; 

$dbh = new PDO("sqlsrv:server=".$host."; Database=".$dbName, $dbUser, $dbPass); 
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

$sql_one = " 
SELECT CONCAT(CAST(Stage_Rebate_Index.MR_ID AS INT),' - ', Stage_Rebate_Master.MR_Name) AS MR_ID, 
     Stage_Rebate_Index.MR_ID AS sort_column, 
     CAST(Supp_ID as INT) AS Supp_ID 
FROM Stage_Rebate_Index 
    LEFT JOIN Stage_Rebate_Master 
    ON Stage_Rebate_Master.MR_ID = Stage_Rebate_Index.MR_ID 
WHERE Stage_Rebate_Index.MR_ID = '$mr_id' 
ORDER BY sort_column"; 


//$users = $dbh->query($sql); 
$users_one = $dbh->query($sql_one); 
?> 

<html> 
    <body> 

     <!-- Table --> 
<p> 
    <div id="table_div"> 
     <table border="1" id="index_table" class="ui-widget ui-widget-content"> 
      <thead> 
       <tr class="ui-widget-header"> 
       <td>MR ID</td> 
       <td>Supplier ID</td> 
       </tr> 
      </thead> 
      <?php foreach($users_one->fetchAll() as $supp) { ?> 
      <tr> 
       <td class="mr_id"><?php echo $supp['MR_ID'];?></td> 
       <td class="supp_id"><?php echo $supp['Supp_ID'];?></td> 
      </tr> 
      <?php } ?> 
     </table> 
    </div> 

    </body> 
    </html> 

EDIT: Обновленный запрос с harcoded значением ...

$sql_one = " 
SELECT 
     CONCAT(CAST(t1.MR_ID AS INT),' - ', COALESCE(t2.MR_Name, '')) AS MR_ID, 
     t1.MR_ID AS sort_column, 
     CAST(Supp_ID as INT) AS Supp_ID 
FROM Stage_Rebate_Index t1 
     LEFT JOIN Stage_Rebate_Master t2 
     ON t2.MR_ID = t1.MR_ID 
WHERE 
    CONCAT(CAST(t1.MR_ID AS INT),' - ', t2.MR_Name) = LTRIM(RTRIM('1 - Company A')) 
ORDER BY sort_column"; 
+4

Обновление вопрос и удалить ** все **, что ** не ** связано с вашим вопросом. Если вы спросите о SQL - удалите все html/css/javascript из вашего вопроса. – Dekel

+0

, вы должны начать использовать псевдоним для имен таблиц, что сделало бы это намного проще. – GuidoG

ответ

3

В ваш где положение

WHERE 
    MR_ID = '$mr_id' 

Укажите таблицу вы хотите от таких, как:

WHERE 
    Stage_Rebate_Master.MR_ID = '$mr_id' 

You shoul d, возможно, также укажите таблицы в предложении select.

+0

Это хорошо, потому что он избавляется от моего неоднозначного столбца, но это связанное значение не находится в таблице Stage_Rebate_Index или Master ... его просто соединение между 2 – Rataiczak24

+0

Измените псевдоним в инструкции select, чтобы он не соответствовал имени столбца, а затем используйте его в том месте. Это или использовать всю формулу конкатенации в предложении where. – nurdyguy

2

Из вашего комментария к решению Zackary Murphy это звучит как ваш MR_ID, который вы хотите найти в том месте, где на самом деле вычисленное значение, а не значение столбца в таблицах. Попробуй это.

SELECT 
     CONCAT(CAST(t1.MR_ID AS INT),' - ', COALESCE(t2.MR_Name, '')) AS MR_ID, 
     t1.MR_ID AS sort_column, 
     CAST(Supp_ID as INT) AS Supp_ID 
FROM Stage_Rebate_Index t1 
     LEFT JOIN Stage_Rebate_Master t2 
     ON t2.MR_ID = t1.MR_ID 
WHERE 
    CONCAT(CAST(t1.MR_ID AS INT),' - ', t2.MR_Name) = LTRIM(RTRIM('$mr_id')) 
ORDER BY sort_column 

* Редактировать, чтобы добавить псевдонимы таблиц.

* Редактировать Добавлена ​​отделка белым пространством.

* Редактировать добавлено COALESCE в случае t2.MR_Name есть null.

+0

Это работает, но по какой-то причине не поднимает значение '$ mr_id' .... Я даже сделал' echo $ mr_id', чтобы убедиться, что значение введено правильно и оно есть. – Rataiczak24

+0

Сделайте эхо на самом '$ sql_one', мне любопытно, как это происходит. – nurdyguy

+0

Хорошо, нашел проблему .... формат значений - «1 - компания A», однако, когда этот запрос запущен, он выходит как «1 - компания A» ... так что есть дополнительное пространство до 1 и после A ... как это будет выглядеть? – Rataiczak24

0

Вы должны предоставить полное имя столбцов таблицы.

Как у вас есть 2 таблицы, table1 и таблица2, и COL1 как имя столбца и в таблице

Если вы извлечения данных из этих 2 таблице ниже приведен пример запроса

select 
    table1.co11 as tbl1col1, table2.col1 as tbl2col1 
from 
    table1 
join 
    table2 on table1.id = table2.id 
where 
    table1.col1 = "your statement" and table2.col1 = "your statement"