Выбор данных из двух таблиц mysql в одном запросе - PullRequest
0 голосов
/ 22 января 2010

У меня есть две таблицы, помещики и свойства. Моя таблица свойств имеет; ID, адрес, почтовый индекс, аренда и ID арендодателя в нем. Проблема, с которой я сталкиваюсь: если я хочу найти все свойства, для которых Mr.Spina является арендодателем, мне нужно выполнить поиск в базе данных арендодателей с именем «spina», чтобы получить его идентификатор, который сохраняется в базе данных свойств, из которой я могу извлеките подробности свойств.

Я думал, что это будет работать, но это не правильно:

> SELECT property.ID, property.address, property.postcode, property.lease, landlords.firstName, landlords.lastName FROM property INNER JOIN landlords ON landlords.firstName LIKE '%spina%' OR landlords.lastName LIKE '%spina%'

Я приложил изображения структур таблицы.

Арендодатели:

допускается только одна ссылка

Особенности:

http://img5.imageshack.us/img5/7199/propertyn.gif

Результат вставки «spina» в поле должен быть: допускается только одна ссылка

Вот мой извлеченный код ...

>  if($field=="landlord"){
>     
>     $sql="SELECT property.ID, property.address, property.postcode,
> property.lease, landlords.firstName,
> landlords.lastName FROM ".$do." INNER
> JOIN landlords ON landlords.firstName
> LIKE '%".$q."%' OR landlords.lastName
> LIKE '%".$q."%'";
>         }    else{
>     $sql="SELECT * FROM ".$do." WHERE " . $field . " LIKE '%" . $q . "%'";  
> }    //end special case     $result =
> mysql_query($sql);
>       echo "$sql";
>       echo "<table border='1'>
>     <tr>
>      <th>ID</th>
>      <th>Address</th>
>      <th>Post Code</th>
>      <th>Lease</th>
>      <th>Landlord</th>
>     </tr>";
> 
>    while($row =
> mysql_fetch_array($result))
>      {
>      echo "<tr>";
>      echo "<td>" . $row['ID'] . "</td>";
>      echo "<td>" . $row['address'] . "</td>";
>      echo "<td>" . $row['postcode'] . "</td>";
>      echo "<td>" . $row['lease'] . "</td>";
>      echo "<td>" . $row['firstName'] ." ". $row['lastName'] ."</td>";
>      echo "</tr>";
>      }    echo "</table>";
> 
>    mysql_close();

Заранее большое спасибо!

Ответы [ 3 ]

1 голос
/ 22 января 2010

В вашем примере запроса вам нужно присоединиться к ID арендодателя.

SELECT property.ID, property.address, property.postcode, property.lease,
    landlords.firstName, landlords.lastName 
FROM property INNER JOIN landlords ON landlords.id = property.landlordID
WHERE landlords.firstName LIKE '%spina%' OR landlords.lastName LIKE '%spina%'
0 голосов
/ 22 января 2010

Похоже, вы используете INNER JOIN неправильно; то, что вы хотите, это что-то вроде этого:

SELECT
    property.ID, property.address, property.postcode, property.lease, landlords.firstName, landlords.lastName
FROM
    property
INNER JOIN
    landlords
ON 
    landlords.ID = property.landlord
WHERE
    landlords.firstName LIKE '%spina%'
    OR
    landlords.lastName LIKE '%spina%'
0 голосов
/ 22 января 2010

Вы сказали:

> SELECT property.ID, property.address, property.postcode, property.lease, firstName, lastName FROM property INNER JOIN landlords ON firstName LIKE '%spina%' OR lastName LIKE '%spina%'

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

... LEFT JOIN landlords ON landlords.ID == property.landlord_ID ...

А затем переместите ваш выбор в предложение WHERE:

... WHERE firstName LIKE '%spina%' OR lastName LIKE '%spina%'

пример:

> cat > landlords.csv
1,Alex,Spina
2,Spina,Brown
3,Katell,Jentreau

> cat > properties.csv
1,toytown
2,hogwarts
3,mars
4,new york
2,sheffield

> sqlite3

> CREATE TABLE landlords (ID,firstname,lastname);
> .import "landlords.csv" "landlords";
> CREATE TABLE properties (landlord,address);
> .import "properties.csv" "properties";
> SELECT * FROM properties JOIN landlords ON landlord = ID
    WHERE (firstname LIKE "Spina" OR lastname LIKE "Spina");
landlord,address,ID,firstname,lastname
1,toytown,1,Alex,Spina
2,hogwarts,2,Spina,Brown
2,sheffield,2,Spina,Brown
...