2013-05-09 4 views
1

У меня были проблемы в течение последних нескольких часов, пытаясь обернуть мою голову, чтобы вытащить похожие данные из двух разных таблиц. Я играю с заявлениями Join, но не смог выполнить то, что я пытаюсь сделать.MySql и MySqli Left Join

Сначала я пытаюсь вытащить список своих клиентов и отобразить их и их информацию из этой таблицы в таблице html (это завершено). Во-вторых, я хотел бы взять их индекс (известный как MID) и использовать для ссылки на данные в другой таблице, которая содержит больше данных о MID. Каждый клиент имеет несколько «проектов», расположенных в другой таблице, и каждый из этих проектов имеет значение, называемое «пакетом», значение может быть либо 1,2, либо 3. То, что я хотел бы сделать, это потянуть все данные клиента из одной таблицы, а также тянуть общее количество каждого пакета, который у них есть. I. В моей таблице у меня пустое место для pack1, pack2, pack3, которое, я надеюсь, будет содержать общее количество строк, которые содержат это число в пакете с тем же MID.

Example [ name ] [totalprojects][ totalpackage1][totalpackage2][totalpackage3] 
      Bob   25    4    12    9 

Вот мой код

$query_load_accounts = "SELECT * FROM useraccounts ORDER BY MID"; 
$result_load_accounts = mysqli_query($dbc, $query_load_accounts); 

echo '<center><table border="1">'; 
echo '<cellpadding="10">'; 
echo '<th>Company Name</th>'; 
echo '<th>Member Since</th>'; 
echo '<th>Package 1</th>'; 
echo '<th>Package 2</th>'; 
echo '<th>Package 3</th>'; 
while ($row = mysqli_fetch_assoc($result_load_accounts)) 
{ 

echo "<tr> 
<td><center>{$row['company']}</td></center> 
<td><center>membersince</center></td> 
<td><center>notused</center></td> 
<td><center>package1</center></td> 
<td><center>package2</center></td> 
<td><center>package3</center></td>"; 

} 
echo "</center></table>"; 
mysqli_close($dbc); 
mysqli_free_result($result_load_accounts); 

Другая полезная информация - имя другой таблицы является «проекты» и поля, необходимые являются MID (клиент конкретные) и пакет (только номер пакета т.е. пакет 1 14.99, пакет 2 равен 24.99 ext). Я хотел бы иметь возможность использовать оператор Join, чтобы суммировать количество каждого пакета для каждого пользователя .. им просто так много неприятностей с ним

* ОБНОВЛЕНИЕ Я тестировал следующий оператор, и он правильно извлекает данные, теперь я просто нужно знать, как сортировать эти данные в PHP. Т.е. подсчет строк для каждого пользователя

$ query_load_accounts = "SELECT UserAccounts , проекты ИЗ UserAccounts LEFT JOIN дани ПО useraccounts.mid = projects.mid ORDER BY UID..";


Благодаря нулевой активности в этой теме я решил этот вопрос сам. Скатертью дорога.

'SELECT mid, 
SUM(IF(package = "1", 1,0)) AS `1`, 
SUM(IF(package = "2", 1,0)) AS `2`, 
SUM(IF(package = "3", 1,0)) AS `3`, 
COUNT(package) AS `total` 
FROM projects 
GROUP BY mid 
ORDER BY mid DESC' 
+0

Начнут с некоторым действительным HTML:' эхо '

'; echo ''; 'должно быть' echo '
';' and 'echo "
";' should be 'echo "
";' и вам нужно добавить закрывающий тег '' ко всем строкам таблицы. – Blazemonger

+0

Я сделаю эти изменения, спасибо! Я пошел от создания настольных приложений к webapps, поэтому я все еще изучал структуру таблицы html. –

+0

Во-вторых, есть ли в вашей таблице столбец «компания»? – Blazemonger

ответ

0

«SELECT середине, СУММ (ЕСЛИ (пакет = "1", 1,0)) AS 1, СУММ (ЕСЛИ (пакет = "2", 1,0)) А.С. 2, SUM (IF (пакет = "3", 1,0)) AS 3, COUNT (пакет) AS total ИЗ проектов GROUP BY середины ОКОЕК середины DESC»