2015-11-17 2 views
0

У меня есть три таблицы mysql.Как получить все элементы и их значение по запросу mysql

Таблица-01: table_item

В этой таблице все элементы с их соответствующими идентификаторами сохраняются. Элементы разделены на две категории. Один из них пишет категорию (catid-1), а другая категория одежды (catid-2).

--------------------------------------------- 
| id | catname | catid | itemid | itemname | 
--------------------------------------------- 
║ 1 ║ writing ║ 1 ║ 1 ║ Pen ║ 
║ 2 ║ writing ║ 1 ║ 2 ║ Pencil ║ 
║ 3 ║ writing ║ 1 ║ 3 ║ Sharpner ║ 
║ 4 ║clothing ║ 2 ║ 4 ║ Pant ║ 
║ 5 ║clothing ║ 2 ║ 5 ║ shirt ║ 
║ 6 ║clothing ║ 2 ║ 6 ║ coat ║ 
║ 7 ║clothing ║ 2 ║ 7 ║ Tie ║ 
--------------------------------------------- 

Table-02: bid_item

Каждый год ставка/конкурс называется на приобретение селективных элементов из таблицы выше пункта (table_item). Поэтому в этой таблице выбранные элементы, выбранные для участия в тендере/тендере, хранятся в год.

---------------------- 
║ id ║ itemid ║ year ║ 
---------------------- 
║ 1 ║ 1 ║ 2015 ║ 
║ 2 ║ 2 ║ 2015 ║ 
║ 3 ║ 3 ║ 2015 ║ 
║ 4 ║ 4 ║ 2015 ║ 
║ 5 ║ 5 ║ 2015 ║ 
║ 6 ║ 6 ║ 2015 ║ 
║ 7 ║ 1 ║ 2016 ║ 
║ 8 ║ 2 ║ 2016 ║ 
║ 9 ║ 3 ║ 2016 ║ 
║ 10 ║ 4 ║ 2016 ║ 
║ 11 ║ 7 ║ 2016 ║ 
---------------------- 

Table-03: bid_2015

После вызова бид/Tender, скорость соответствующих компаний для выбранных элементов хранятся в этой таблице. Каждая компания не будет предлагать цену предложения для каждого товара, выбранного для определенного года. Таблицы создаются в соответствии с псевдонимом year. Здесь ставки ставка на 2015 год сохраняется, как показано ниже:

-------------------------------- 
║ id ║ itemid ║ company ║ rate ║ 
-------------------------------- 
║ 1 ║ 1 ║ X  ║ 2.0 ║ 
║ 2 ║ 2 ║ X  ║ 2.2 ║ 
║ 3 ║ 3 ║ X  ║ 1.0 ║ 
║ 4 ║ 4 ║ X  ║ 10.0 ║ 
║ 5 ║ 5 ║ X  ║ 15.0 ║ 
║ 6 ║ 1 ║ Y  ║ 1.5 ║ 
║ 8 ║ 2 ║ Y  ║ 2.0 ║ 
║ 9 ║ 3 ║ Y  ║ 1.5 ║ 
║ 10 ║ 4 ║ Y  ║ 12.0 ║ 
║ 11 ║ 6 ║ Y  ║ 20.0 ║ 
-------------------------------- 

мне нужна HTML таблица (с полем ввода) для данных ввода/редактирований для определенного года (в данном случае, к 2015 году). Таблица будет содержать следующее:

1) Таблица покажет каждый из элементов для clothing catagory (catid-2) тех объявлены на торги/тендер на 2015.

2) Если цена предложения компании, цена будет в колонке ставки, в противном случае ставка столбец будет пустым. Администратор может либо изменить цену (если ввести неправильную цену предложения), либо добавить ставку для других товаров, которые не были введены сначала для конкретной таблицы.

Так что внешний вид формы таблицы HTML будет, как показано ниже:

HTML Form-Table (For Data Entry/Edit) : For Company-Y and clothing catagory for the year-2015 

Company: (drop-down menu- Company-Y) 
------------------------------------------------------ 
    Item Name | Rate | 
---------------------- 
    Pant  | 12.0 |   
----------------------- 
    Shirt |   
----------------------- 
    Coat | 20.0 |   
----------------------- 
     ============ 
     Submit 
     ============ 

Как вы можете видеть Скорость рубашки является пустым для компании-Y, как эта компания не дает цену предложения для рубашки. Если эта компания даст цену Shirt позже, можно ввести тариф и обновить таблицу.

Так что же будет запросом mysql для получения таблицы форм html, как указано выше? Если я выполнить этот запрос:

SELECT i.itemname,d.rate FROM table_item as i INNER JOIN bid_item as b ON i.itemid=b.itemid LEFT JOIN bid_2015 as d ON b.itemid=d.itemid WHERE i.catid=2 AND d.company='Y' AND b.year=2015 

Но ожидаемый HTML таблица не подходит. Поскольку используются INNER и LEFT Join, Item Name s показаны более одного раза в таблице форм.

Каким будет эффективный запрос mysql для вывода таблицы форм html, как указано выше?

+0

@ dan08, я могу получить результат запроса mysql для создания html-формы с использованием html и css. Мне это не нужно. Мне нужен только запрос mysql. –

+0

О, ладно, вот как я его читаю. – dan08

ответ

2

enter image description here

это работает для всех данных компании Y в 2015 году

select itemname, 
     rate 
from table_item join bid_item on(table_item.itemid=bid_item.itemid and year=2015 and catid=2) 
left join bid_2015 on(bid_2015.itemid=bid_item.itemid and 
    bid_item.itemid=table_item.itemid and company='Y' and year=2015 and catid=2) 
+0

Нет, я думаю, что он вернет предметы, которые цена указана компанией-Y в 2015 году. Но по-прежнему есть товар 'Shirt', цена которого не указана компанией-Y. Кроме того, вам нужно только отфильтровать категорию «Одежда» (элементы категории «Написание» не будут отображаться в таблице html) –

+0

Adarsh ​​Mohan> это работает для всех данных компании Y в 2015 году ........... Нет, мне не нужны все данные компании Y, мне нужно «предметы одежды» категории Y в 2015 году –

+0

ждут. позвольте мне попробовать другое решение –

1

Этот запрос будет работать нормально.

SELECT i.itemname, 
d.rate 
FROM table_item as i 
INNER JOIN bid_item as b ON i.itemid=b.itemid AND b.year=2015 
LEFT JOIN bid_2015 as d ON b.itemid=d.itemid AND d.company='Y' 
WHERE i.catid=2 

Примечание:

Если когда-нибудь вы делаете LEFT/RIGHT joins на столе (скажем b как в ваш пример ниже). Никогда не устанавливайте условия table 'b' в WHERE . Он будет действовать как INNER JOIN.

Так этот код Закон о

SELECT i.itemname, 
     d.rate 
    FROM table_item as i 
    INNER JOIN bid_item as b ON i.itemid=b.itemid 
    LEFT JOIN bid_2015 as d ON b.itemid=d.itemid 
    WHERE i.catid=2 AND d.company='Y' AND b.year=2015 

в INNER JOIN, как указано ниже.

SELECT i.itemname, 
      d.rate 
     FROM table_item as i 
     INNER JOIN bid_item as b ON i.itemid=b.itemid 
     INNER JOIN bid_2015 as d ON b.itemid=d.itemid 
     WHERE i.catid=2 AND d.company='Y' AND b.year=2015 

Надеется, что это помогает.

+0

Субин, сейчас в нашей стране 12:30. Я проверю ваш код завтра и дам вам знать результат. Большое спасибо. –

+0

Здесь 12.00 в INdia –

+0

Да, я из Бангладеш. Наше время находится в 30 минутах от страны. –

Смежные вопросы