Как я могу запросить 2 таблицы и несколько столбцов?

#php #mysql

#php #mysql

Вопрос:

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

Вот как выглядят таблицы:

ТАБЛИЦА 1

Имя

ТАБЛИЦА 2

Продукт (название)

Инвентаризация

CatID

ProductID

ТАБЛИЦА 3

product_url

«название» (таблица 1) должно совпадать с «Продуктом» (таблица 2). Далее, «Инвентаризация» (таблица 2) должна быть = «Y». Наконец, «CatID» должен быть = «2».

Моя попытка выглядела примерно так:

 SELECT 1.name, 2.Product, 2.Inventory, 2.CatID
FROM table1 1, table2 2 
WHERE 2.Inventory = 'Y'
  AND 1.name = 2.Product
  AND 2.CatID = '2'
 

Исходя из результатов, я хотел бы получить дополнительную информацию из таблицы, такую как описание продукта и т. Д., Которая будет в table1 и table2… Я никогда раньше не присоединялся и не запрашивал 2 (или более) таблицы. Любая помощь была бы очень признательна.

Комментарии:

1. Пожалуйста, примите ответы на некоторые из ваших предыдущих вопросов. Вы получите более быструю помощь.

2. Если t2.Product = t1.Name and Name является единственным столбцом в t1, вам не нужно ПРИСОЕДИНЯТЬСЯ.

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

4. Я слышу тебя в этом вопросе… К сожалению, это существующие таблицы

Ответ №1:

Попробуйте это:

 SELECT table1.Name, table2.Product, tabl2.Inventory, table2.CatID
FROM table1 INNER JOIN table2
ON table1.Name = table2.Product 
WHERE table2.CatID = '2'
 

Комментарии:

1. Я попробовал это и даже добавил букву «е», отсутствующую в таблице 2. Инвентаризация… Это все еще не работает. $query = (» ВЫБРАТЬ table1.Name , таблица2.Продукт, таблица2. Инвентаризация, таблица2.ИДЕНТИФИКАТОР CatID ИЗ таблицы1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ таблицы2 С таблицой1. Name = table2.Product И table2.CatID = ‘2’ «); в то время как($test = mysql_fetch_array($query)) { echo $test[‘name’]; }

2. CatID = ‘2’ должен быть в предложении WHERE, а не from . Опечатка с моей стороны в оригинальном сообщении. Отредактированный запрос является допустимым запросом, хотя предполагается, что база данных настроена правильно и вы успешно передаете значения из php-кода. Вы можете получить больше значений, чем ожидаете, в зависимости от структуры таблиц и ваших первичных / внешних ключей, но нам потребуется больше информации, чтобы знать это…

3. $test[‘name’] должно быть $test[‘table1.name «];

Ответ №2:

 SELECT t1.name, t2.Product, t2.Inventory, t2.CatID, t2.ProductID
FROM table1 t1
INNER JOIN table2 t2 ON t2.Product = t1.name
WHERE t2.Inventory = 'Y' AND t2.CatID = 2
 

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

Также помните, что когда вы обращаетесь к этим полям в PHP, значение заглавных букв имеет значение. Вам нужно сделать что-то вроде этого:

 <?php

$q = QUERY FROM ABOVE
$r = mysql_query($q);
while($row = mysql_fetch_assoc($r)) {
    $name = $row["name"];
    $product = $row["Product"];
    $inventory = $row["Inventory"];
    $catid = $row["CatID"];
    $productid = $row["ProductID"];
}

?>