2013-03-01 3 views
0

Я wordking с CodeIgniterсоотношения между категориями таблицей и таблицей заводов CodeIgniter

У меня есть база данных с тремя таблиц, называемых категориями, фабриками и factorycategories

в моей категории таблице у меня есть следующие строки:

idCategories 
Categorie 
idFactories 

в моей таблице заводов у меня есть следующие строки:

idFactories 
Factoryname 
Postcode 
Country 
Telephone number 
Email 
Website 
Profile 
Adress 

в моем factorycategories у меня есть следующие строки:

id 
idFactories 
idCategories 
Factorycategory 

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

Заводы могут быть более чем в одной категории.

Так как я могу установить связь между этими таблицами, чтобы получить эти результаты, когда я нажимаю на категорию.

example

Как я управлять этим с базой данных MySQL и PhpMyAdmin 2.8?

Я искал в google, но не смог найти что-то.

+2

Завод может принадлежать только одной категории? В этом случае вам следует сохранить идентификатор категории в таблице ваших заводов. Теперь у вас есть то, что каждая категория принадлежит фабрике * one *. Это не так. – Mischa

+0

Нет, я забыл рассказать. У меня есть другая таблица в моем db, называемая factorycategories. с idCategories и idFactories. так что, возможно, мне нужно что-то сделать с этим? –

+0

редактированный вопрос –

ответ

1

Во-первых, изменить ваш DB-дизайн ...

table factories 
----------------- 
idFactories 
idCategories (int) <---- add this field 
Factoryname 
Postcode 
... 

Затем фабрики запросов, которые принадлежат к определенной категории. Пропустите idCategories со ссылкой:

Создание ссылки:

// sql to get all categories from the DB 
$sql="SELECT * FROM categories ORDER BY Categorie"  

// --- insert your code to pull the data from your DB here --- 

// building your links on the left column 
// assuming all rows from the sql above are in array $categories 
foreach ($categories as $cat) 
    echo '<a href="thispage.php?id='.$cat['idCategories'].'">'.$cat['Categories'].'</a>'; 

шоу фабрики согласно выбранной категории ... достаточно в начале файла:

if (isset($_GET['id']) && intval($_GET['id'])>0) 
    $id=intval($_GET['id']); 
else $id=0; 

if ($id>0) { 
    $sql="SELECT * FROM factories WHERE idCategories=$id"; 
    // --- insert your code to pull the data from your DB here --- 
    // store all the rows in array $factories 
} 

выводя заводы :

if ($id>0) { 
    foreach ($factories as $fac) { 
     // code for echoing the data 
    } 
} else { 
    echo "select a category on the left to show the factories..."; 
} 

Ой, я вижу вы изменили отношение между категориями и фабриками в своем вопросе. В принципе, методы одинаковы, изменится только sql.

+0

Спасибо, очень классный. попробуем это. и никогда не знал, как это сделать, правильный путь. –

+0

h2ooooooo sql кажется нормально для вашей задачи ... – michi

+0

Да, но я очень новичок в кодеригенере, поэтому ваш код проясняет ситуацию. и это хорошо в процессе обучения. –

0

Вы, вероятно, ищете INNER JOIN:

SELECT 
    fa.idFactories, 
    fa.Factoryname, 
    fa.Postcode, 
    fa.Country, 
    fa.Telephonenumber, 
    fa.Email, 
    fa.Website, 
    fa.Profile, 
    fa.Adress, 
    fc.Factorycategory, 
    ca.Categorie 
FROM 
    `factories` as `fa` 
INNER JOIN 
    `factorycategories` as `fc` 
ON 
    fa.idFactories = fc.idFactories 
INNER JOIN 
    `categories` as `ca` 
ON 
    ca.idCategories = fc.idCategories 
WHERE 
    ca.Categorie = 'MyCategory' 
+0

спасибо попробует. когда у меня есть вопросы об этом, я могу спросить их и вас? –

+0

@KeesSonnema. Вы должны задать любые вопросы StackOverflow в целом - мы все здесь, чтобы помочь индивидуально, и большинство из нас хочет продолжить SO в наше время.Я могу пообещать вам, что этот запрос очень прост, и любой, кто знает MySQL на достойном уровне (большинство пользователей MySQL StackOverflow), сможет вам помочь. – h2ooooooo

+0

все хорошо спасибо. –

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