2014-11-06 2 views
0

Для каждого клиента, я хочу вернуть: id, имя, адрес, город, колпак, страну и общее количество заказов. Имена таблиц: клиенты (10 записей) и заказы (20 записей)Выбрать всех клиентов и всех заказов клиента

Я пробовал этот код, но он не работает

<?php 
$conn = mysqli_connect('127.0.0.1','...','...','...') or die("Connection failed: " . $conn->connect_error); 

$select = mysqli_query($conn,"SELECT customers.id,customers.name,customers.address,customers.city,customers.cap,customers.country COUNT(customerid) as TotalOrders FROM customers LEFT JOIN orders GROUP BY customer.id"); 

while($row = mysqli_fetch_array($select,MYSQLI_ASSOC)) 
{ 
    $tb = <<<table 
    ...{$row['totalorders']}... 
    table; 
    echo $tb; 
} 
mysqli_free_result($select); 

echo $num_record = mysqli_affected_rows($conn); 

$conn->close(); 
?> 
+2

Отсутствующий запятая? И отсутствие соединения. Возможно, если вы не напишете все это на одной строке и/или прочитайте сообщения об ошибках! – Strawberry

ответ

1

Так что-то вроде ...

<?php 
include('../path/to/connection/stateme.nts'); 

$query = 
" 
SELECT c.id 
    , c.name 
    , c.address 
    , c.city 
    , c.cap 
    , c.country 
     COUNT(o.customerid) TotalOrders 
    FROM customers c 
    LEFT 
    JOIN orders o 
    ON o.customerid = c.id 
GROUP 
    BY c.id; 
"; 


$result = mysqli_query($db,$query); ** where $db is something like mysqli_connect("myhost", "myusername", "mypassword"); 

while($row = mysqli_fetch_assoc($result)) 
{ 
$tb = <<<table 
...{$row['totalorders']}... 
table; 
echo $tb; 
} 

mysqli_free_result($result); 

echo $num_record = mysqli_affected_rows($db); 

$db->close(); 
?> 

(я не PHP кодировщик)

+0

+1 для аккуратности @Strawberry! –

+0

получил 2 ошибки: и mysqli_fetch_array(), и msqli_free_results() ожидает, что параметр 1 будет mysqli_result, boolean given – Antonio102

0

У вас есть запятая отсутствующей -

customers.country COUNT(customerid) 
-----------------^ 

и вы опустили в ON условие -

FROM customers LEFT JOIN orders //ON would be here 

Одна вещь, вы всегда должны сделать, это создать и ру n ваши запросы к вашей базе данных до вы помещаете эти запросы в свой код. И всегда, всегда включают проверку ошибок.

+0

всегда включают проверку ошибок в процессе разработки. Удалите его на производстве! – Strawberry

+0

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

+0

Но вы делаете себя уязвимыми для атаки, раскрывая сообщения об ошибках конечным пользователям. – Strawberry

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