Для такого рода вещей вам, вероятно, следует попробовать:
SELECT * FROM contacts refC JOIN contacts allC USING (fname, lname) WHERE refC.clientid='13'
Это само-присоединение к контактам на основе имени и фамилии, поэтому allC
создает псевдоним списка всех контактов, которые имеют имена и фамилии refC
(включая его самого).
Таким образом, вы получаете всю информацию, которую ищете, только в одном запросе SQL. Для настройки можно выполнить запрос, добавив индекс по столбцам fname
и lname
таблицы contacts
, поэтому объединению не нужно анализировать всю таблицу на соответствие.
- редактировать: вы можете более точно указать, как вы объединяете свои таблицы, например:
SELECT *
FROM contacts refC
JOIN contacts allC ON (allC.fname LIKE CONCAT(refC.fname, '%') AND allC.lname LIKE CONCAT(refC.lname, '%'))
WHERE refC.clientid='13'
Что строго эквивалентно (но ИМО легче читать, чем):
SELECT *
FROM contacts refC,contacts allC
WHERE allC.fname LIKE CONCAT(refC.fname, '%')
AND allC.lname LIKE CONCAT(refC.lname, '%')
AND refC.clientid='13'