как лучше забрать инфу из 2х таблиц

m2k

Новичок
как лучше забрать инфу из 2х таблиц

есть 2 таблицы поля id у них уникальны и идентичны для каждой записи т.е. первая запись в обоих таблицах имеет id=1 и тд...
вопрос правилен ли следующий запрос ? правильно ли запрашивать данные из 2х таблиц таким образом?
$res=mysql_query("SELECT * FROM `table1`,`table2`");
и ещё если в 2х таблицах будут поля с одинаковыми именами то к ним следует обращатся так table1.field и table2.field или я не прав в корне и этот запрос совершенно не верен ....
 

Кром

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

m2k

Новичок
нет данные не дублируются в 1ой таблице хранится инфа о товаре общего назначения какой брэнд какая категория наименование рэйтинг и тд...
а во второй таблицы поля типа TEXT с полной информацией по товару... тех характеристики комплект поставки параметры.... вот
 

Кром

Новичок
1. >SELECT * FROM `table1`,`table2`
Вот это запрос представляет собой декартово произведение. Т.е. произведение количества строк каждой таблицы. Допустим таблица состоит из 100 строк, другая тоже из 100. Итого при выводе получится 100000 строк.

2. Поэтоу всегда при таких выборках нужно ставить условие WHERE.
В твоем случае это будет
SELECT * FROM `table1`,`table2`WHERE table1.id = table2.id
Теперь это уже будет обьединение по равенству (equi-join), т.е. то, что тебе и нужно.

3. Если же у тебя возможен случай, когда в первой таблице присутствуют все записи, а во второй отсутствуют некоторые описания, тебе может понадобиться left-join, который выглядит так:
SELECT *
FROM `table1` LEFT JOIN `table2`
ON table1.val = table2.val
Он выведет все названия из первой таблицы и те описание, которые присутствуют из второй.

4. Но! Так как у тебя для каждой строки из первой таблицы присутствует строка из второй, тебе все таки стоит перенести все в одну таблицу. Выборку это особенно не замедлит.
 

m2k

Новичок
спасибо:)
ммм тоесть если уменя будет 14 полей в одной таблице где по идее должно быть более 100.000 записей на выборку не повредит хранение всех данных в одной таблице ? темболее что в выборке участуют только записи из первой таблицы а 2я таблица нужна только для просмотра конкретного товара... и по 2ой таблице скорей всего будет только просто текстовой поиск.....
 

Кром

Новичок
>темболее что в выборке участуют только записи из первой таблицы а 2я таблица нужна только для просмотра конкретного товара...

Так вырисовываются интересные подробности.
Если ты выводишь данные только из первой таблицы, то соединять их, естественно не обязательно. Т.е. запрос
SELECT * FROM `table1`,`table2` становится лишним и можно записать просто:
SELECT * FROM `table1` LIMIT 0, 30
и при попадании на конкретную страницу с описанием:
SELECT * FROM `table2` WHERE id = "good_id"
 

m2k

Новичок
ммм суть в том что когда я буду в клиенской части выводить в общем списке инфу о товаре я конечно не буду объединять таблицы только при просмотре 1го товара (его подробного описания) а объеденить 2 таблицы мне нада в админке для редактирования товара щас у меня 2ми запросами из 2х таблиц инфа выцепляется и в инпуты и текстарии вставляется для редактирования я просто подумал что лучше бы сделать 1ним запросом и решил спросить как это лучше организовать :)
 

Кром

Новичок
Организовывай админку точно по такому же принципу. Одна страница со списком товаров и постраничным выводом. Кликаешь на любой товар - попадаешь на другую страницу в форму редактирования. Это самый удобный вариант.
 

m2k

Новичок
у меня так и есть)))) сначала список товаров и инца общая из первой таблицы кликаеш на товар открывается новая страница с инпутами и текст ариями) так вот так как при редактировании товара нужна инфа из обоих таблиц мне нужно их объеденить или сделать 2запроса вместо объединения
 

Кром

Новичок
Да можно двумя запросами можно и одним. Если одним, то нужно делать выборку с учетом id
SELECT *
FROM `table1` , `table2`
WHERE table1.id = "1" AND table1.id = table2.val
или
SELECT *
FROM `table1` LEFT JOIN `table2`
ON table1.id = table2.id WHERE table1.id = "1"
Второй вариант запроса предпочтительней.
 

m2k

Новичок
агу ок огромное спасибо за разьяснения давно хотял потренится с объединением да всё реальной задачи небыло)) ок буду делать так как предпочтительней:)
а вот я ещё подумал раз можно в селекте объеденить то нельзяли удалить одним запросом из разных таблиц ... если во всех таблицах есть поле с одним и темже значением.... ну допустим

mysql_query("DELETE FROM `table1`,`table2`,`table3` WHERE `table1.id`='".$_GET['id']."' AND `table2.id`='".$_GET['id']."' AND `table3.id`=''".$_GET['id']."");

или это моё больное воображение уже чтото не то придумало?)))

а и ещё З.Ы. как обращатся когда объеденил 2 таблицы получается так ? $row['table1.field2'] так чтоли?)
 

Кром

Новичок
Удаление из разных таблиц поддерживается начиная с MySQL 4.0.2.
http://dev.mysql.com/doc/mysql/ru/DELETE.html

>как обращатся когда объеденил 2 таблицы получается так ? $row['table1.field2'] так чтоли?)

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

m2k

Новичок
ок огромное спасибо за разъяснения по данному вопросу:)
 

Thomas

Guest
Люди как правильно написать один запрос чтобы удалить с одной таблицы запись и одновремено с другой таблицы еще несколько:

типа:
DELETE FROM news WHERE id=6
DELETE FROM news_comment WHERE news_id=6

я что то не могу понять как это сделать.
спасибо.
 

BabyKiller

Guest
DELETE news,news_comment FROM news,news_comment WHERE news.id=6 OR news_comment.id=6

Это написано на основе http://dev.mysql.com/doc/mysql/ru/DELETE.html , хотя я не уверен в правильности, а если даже этот запрос и работоспособен, то мне кажется намного выгодней будет использование именно двух запросов, т.е. как у тебя.
 
Сверху