Я делаю два запроса, чтобы получить значение. По-моему, было бы быстрее. Я думаю, что лучший способ - использовать соединение. Это мой код:
$uid = db_query("SELECT uid FROM TABLE1 WHERE mail = '{$account->mail}' LIMIT 1");
$row = mysql_fetch_array($uid);
$uid = $row[0];
$brief = db_query("SELECT value FROM Table2 WHERE uid = '{$uid}' AND fid = '16' LIMIT 1");
$row = mysql_fetch_array($brief);
$brief = $row[0];`
Как я могу объединить эти два запроса в один?
Большое спасибо в Advance!
SELECT value, ui
FROM TABLE1 T1
INNER JOIN Table2 T2
USING (uid)
WHERE mail = '{$account->mail}'
AND fid = 16
LIMIT 1
Но ваши запросы странные. Является ли uid
уникальным? Является ли fid
уникальным? В противном случае он будет выбирать "случайную" строку.
В принципе, мой запрос соединяет TABLE1 с Table2 с использованием столбца uid, и он принимает только строки, где mail = $account- > mail и fid = 16. Поэтому, если есть несколько строк, вы не можете быть уверены, один из них будет выбран.
Запрос будет выглядеть следующим образом:
SELECT TABLE1.uid,TABLE2.value
FROM TABLE1,TABLE2
WHERE TABLE1.mail = '{$account->mail}'
AND TABLE2.uid = TABLE1.uid
AND TABLE2.fid = '16'
LIMIT 1
Схват данных из строки:
$uid = $row[0];
$brief = $row[1];
Другие предоставили синтаксис, поэтому я не буду повторять эту часть. Но о том, какой тип соединения использовать:
Чтобы получить в буквальном смысле то, что вы получили бы с вышесказанным, вы должны использовать left join
с TABLE1 в качестве первой таблицы в соединении.
В вашем примере вы всегда получаете uid
, и вы можете получить value
. Левое соединение даст вам тот же результат, что и вы всегда возвращаете результат (uid
) из таблицы 1 и строки (value
), которые совпадают с таблицей 2. Конечно, при условии, что значение для mail
было сопоставлено.
Примечание. Насколько я понимаю, использование LIMIT 1
может замаскировать проблему, если у вас нет уникального ограничения на почтовый столбец. Если в таблице TABLE1 было два ряда с одинаковым значением почты, вы никогда не узнаете об этом с этим запросом. В некоторых случаях это может быть ошибкой в вашей системе.
TABLE2.uid = TABLE1.uid
. Но, если честно, я не фанат старого синтаксиса, синтаксис с INNER JOIN (или NATURAL INNER JOIN) гораздо понятнее.LIMIT 1
не предотвращает это?