2013-06-10 2 views
-1

У меня есть 3 стола.php pdo странные результаты строки

PK table 
- company 

FK table 
- staff 
- machines 

Table Data: 

Company: 
ID | NAME 
1 | FLY RESORTS 

Staff: 
ID(fk) | NAME 
1  | John Doe 
1  | Johny Doe 

Machines: 
ID(fk) | NAME 
1  | Bulldozer 
1  | Helicopter 
1  | Lorry 

Я написал PDO SELECT COUNT коды:

$keyword = "%" . $_GET["keyword"] . "%" ; 


    $sql = "SELECT count(*) FROM `company` INNER JOIN staff ON staff.ID = company.ID INNER JOIN machines ON machines.ID = company.ID WHERE (comp.name like '$keyword' or machines.name like '$keyword' or staff.name like '$keyword')"; 
    $result = $conn->prepare($sql); 
    $result->execute(); 
    $numrows = $result->fetchColumn(); 

Когда я установил $keyword к 'fly', он возвращает несколько результатов имп/строки с таким же названием компании.

Есть ли проблемы с моим кодом? Thanks

+0

Почему вы думаете, что это PDO? вы пробовали этот запрос непосредственно в mysql? –

ответ

1

Becuse you join, вы получите ту же компанию, что и много раз, когда она связана с сотрудником или машиной. Если вы только что хотите сосчитать компанию, вы можете использовать

SELECT COUNT(DISTINCT company.ID) FROM ... 
+0

Будут ли выполняться поиск ключевых слов из других таблиц, таких как машина, если я использую это? –

+1

Да, они будут. – MaX

+0

Что делать, если мне нужны все поля из таблицы компании? (Если у компании более 10 полей). Должен ли я перечислять все столбцы в отдельности? –

1

То, как работает соединение.

В основном вы будете умножать количество строк на каждой таблице, к которой вы присоединяетесь, так что в вашем случае 1 * 2 * 3.

Вы можете изучить, как выглядит ваш результат, прежде чем применять инструкцию WHERE на этом sqlfiddle, который я сделал.

+0

Спасибо :). Не думал об этом раньше –

Смежные вопросы