2009-07-27 5 views
0

Я пытаюсь присоединиться к двум таблицам. Первая таблица содержит список из 11 элементов, которые являются «site_names» с полем auto id «id». Вторая таблица, которую я хочу подключить, имеет поле auto id «desc_id» и другое поле «описания». Эта вторая таблица в настоящее время имеет 3 строки данных, которые я хочу отображать только для идентификатора 1 в таблице 1.Присоединяйтесь к таблицам - MySQL и PHP

Итак, я хочу, чтобы выполнить подключение первого сайта в таблице 1 с идентификатором «1» на весь вторая таблица.

Я не могу понять, как подключить только первую запись (id = 1) в таблице 1 ко всем строкам таблицы 2 (tb.1-> id-> 1 to tbl.2-> desc_id -> 1,2,3).

Надеюсь, что это имело смысл. Любая помощь будет большой. Благодаря

+0

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

+1

Да, видя, что полная структура таблицы поможет. –

+0

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

ответ

1

Try:

select site_name, descriptions 
from table_1 
inner join table_2 
    on 1 = 1 
where table_1.site_id = 1 

Это должно присоединиться дать вам то, что вы хотите.

OK - на основе комментария, я предполагаю, что вы хотите:

site1 | desc1 | desc2 | desc3

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

select site_name, t2.desc, t3.desc, t4.desc 
from table_1 
inner join table_2 t2 
    on t2.desc_id = 1 
inner join table_2 t3 
    on t3.desc_id = 2 
inner join table_2 t4 
    on t4.desc_id = 3 
where site_id = 1 

Такого рода вещи крайне нерегулярно, хотя. Мне кажется, что-то о вашей схеме, вероятно, не совсем правильно для создания такого рода требований.

+0

. Вы также можете настроить, где включить три файла desc_id: где table_1.site_id = 1 AND table_2.desc_id IN (1,2,3) –

+0

@Harper, этот скрипт почти работает, проблема в том, что он отображает имя сайта 3 раза перед каждой строкой из таблицы 2 – Spyderfusion02

+0

Вы пытались добавить группу GROUP BY к запросу тогда ... может помочь –

0

Вот запрос:

<?php 

     $mysql = new mysqli('localhost', 'root', 'root') or die('counld not connect'); 
     $result = $mysql->query("SELECT ajax_demo.explore.site_name, anthony1.property.descriptions FROM ajax_demo.explore INNER JOIN anthony1.property ON ajax_demo.explore.id = anthony1.property.desc_id") or die($mysql->error); 

     if($result) 
     { 
             while($row = $result->fetch_object()) 
             { 
               $id = $row->id; 
               $siteName = $row->site_name; 
               $siteDescription = $row->site_description; 


               echo "$siteName"; 
               echo "$siteDescription"; 
             } 
     } 

    ?> 
0

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

Site 
- SiteID 
- DescriptionID 
- SiteName 

Description 
- DescriptionID 
- Description 

Тогда ваш запрос, чтобы получить места и связанное с ними описание будут выглядеть следующим образом:

SELECT 
    s.SiteName, 
    d.Description 
FROM 
    Site s INNER JOIN Description d 
    ON s.DescriptionID = d.DescriptionID 

Эта структура таблицы предполагает, что множественный Сайты разделяют отдельные описания (согласно вашему размещенному вопросу).

+0

Это, похоже, не работает правильно. Что такое s. д. для? это тип короткой формы? – Spyderfusion02

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