пожалуйста, давайте рассмотрим еще один вариант объединения двух таблиц

Encoder

Guest
пожалуйста, давайте рассмотрим еще один вариант объединения двух таблиц

таблица1 - hobbies
===========================
person_name level hobbie_info
---------------------------------------------------------
Вася Путин 1 шахматы
Женя Зюганов 2 собирает марки
Маша Явлинская 1 шахматы
Петя Немцов 2 собирает марки
============================

таблица2 - persons
=======================
person_name person_info
-----------------------------------------
Вася Путин мальчик
Маша Явлинская девочка
=======================

т.е. во второй таблице есть не все люди, которые есть в первой...

нужно просто соединить две таблицы по имени человека:

информация, которая нужна
=======================
Вася Путин 1 шахматы мальчик
Женя Зюганов 2 собирает марки
Маша Явлинская 1 шахматы девочка
Петя Немцов 2 собирает марки
===========================================

там где нет соответствующего значения person_info не должно ничего выводиться - просто пустое место...

и все это добро потом постепенно вставляется в обычную html таблицу (вставляя где нужно в код страницы $row["person_name"], $row["level"]...)


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


SELECT
persons.person_name, hobbies.person_name, person_info, level, hobbie_info

FROM hobbies, persons
WHERE hobbies.person_name = persons.person_name

а дальше немного теряюсь в догадках...
=========
видео примеры с MYSQL_FETCH_ARRAY и с LEFT JOIN.. ON

но как-то не получается присмпособить их для моего случая...
=========


потом данные хотелось бы вывести чем-то вроде этого:
ECHO "Номер 1 - ", $row["person_name"], "любит ", $row["hobbie_info"]"; и т.д.


не могли бы Вы помочь мне решить мою проблему?
 

Кром

Новичок
[sql]
SELECT
*
FROM hobbies
LEFT JOIN persons
ON
hobbies.person_name = persons.person_name
WHERE ...
[/sql]

и дальше [m]MYSQL_FETCH_ARRAY[/m]

-~{}~ 18.07.05 14:39:

Да, и сравнивать лучше не по name, а по id (`ID` int(10) unsigned NOT NULL auto_increment). Если такого поля нет, создать его в обеих таблицах.
 

Encoder

Guest
большое спасибо

буду провобовать!

-~{}~ 18.07.05 23:34:

Автор оригинала: Кром
[sql]
SELECT
*
FROM hobbies
LEFT JOIN persons
ON
hobbies.person_name = persons.person_name
WHERE ...
[/sql]

и дальше [m]MYSQL_FETCH_ARRAY[/m]
все заработало... НО замечен странный глюк - если в таблице №2 НЕТ человека из таблицы №1, то имя этого человека не выводится вообще... зато спокойно выводится ВСЯ остальная нужная (кроме person_name) информация про этого человека

это можно как-нибудь исправить?
 

Кром

Новичок
>это можно как-нибудь исправить?

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

SELECT *, hobbies.person_name as p_name ...

Т.е. указать псевдоним для person_name из первой таблицы.
 
Сверху