У меня есть 11 таблиц [email1, email2, email3, … email11]
<?php $con = mysql_connect("localhost", "root", ""); $db = mysql_select_db("email-db", $con); $sql = "SELECT Contact_Email FROM email1, email2, email3, email4, email5"; $result = mysql_query($sql); while ($row = mysql_fetch_array($result)) { ?> <tr> <td><? echo $row['Contact_Email']; ?></td> <td><? echo '<br>'; ?></td> </tr> <? } ?>
Что я на самом деле хочу сделать, чтобы выбрать все электронные письма из всех таблиц, используя объединение на всех из них. Как это можно сделать?
Оператор MySQL UNION позволяет объединять два или более набора результатов из нескольких таблиц в единый результирующий набор
SELECT Contact_Email FROM email1 UNION SELECT Contact_Email FROM email2 UNION SELECT Contact_Email FROM email3 . . UNION SELECT Contact_Email FROM email11
По умолчанию оператор UNION удаляет повторяющиеся строки из результата, даже если вы не используете оператор DISTINCT явно.
$sql = "SELECT Contact_Email FROM email1 UNION ALL SELECT Contact_Email FROM email2 UNION ALL SELECT Contact_Email FROM email3 UNION ALL SELECT Contact_Email FROM email4 UNION ALL SELECT Contact_Email FROM email5 UNION ALL SELECT Contact_Email FROM email6 UNION ALL SELECT Contact_Email FROM email7 UNION ALL SELECT Contact_Email FROM email8 UNION ALL SELECT Contact_Email FROM email9 UNION ALL SELECT Contact_Email FROM email10 UNION ALL SELECT Contact_Email FROM email11";
я использовал это
Поскольку общество голосовало, чтобы закрыть дубликат того, как отображать дублированный адрес электронной почты
Вот пример для 4 таблиц, которые вы можете продлить до 11, если вам нужно. Извините, но я не отлаживал этот код, я думаю, основным препятствием был запрос mysql для получения правильных значений из базы данных.
И вы определенно должны прекратить использовать функции mysql *!
$sql ="SELECT t.Contact_Email, e1.Contact_Email email1, e2.Contact_Email email2, e3.Contact_Email email3, e4.Contact_Email email4 FROM ( SELECT e.Contact_Email FROM email1 e UNION ALL SELECT e.Contact_Email FROM email2 e UNION ALL SELECT e.Contact_Email FROM email3 e UNION ALL SELECT e.Contact_Email FROM email4 e ) t LEFT JOIN email1 e1 ON t.Contact_Email = e1.Contact_Email LEFT JOIN email2 e2 ON t.Contact_Email = e2.Contact_Email LEFT JOIN email3 e3 ON t.Contact_Email = e3.Contact_Email LEFT JOIN email4 e4 ON t.Contact_Email = e4.Contact_Email"; echo '<table><thead><tr><th>Email</th>'; for ($i=1;$i<5; $i++){ echo "<th>email $i</th>"; } echo '</tr></thead><tbody>'; $result = mysql_query($sql); while ($row = mysql_fetch_array($result)) { echo '<tr><td>'.$row['Contact_Email'].'</td>'; for ($i=1;$i<5; $i++){ echo '<td>'.(empty($row['email'.$i])?'no':'yes').'</td>'; } echo '</tr>'; } echo '</tbody></table>';
UPDATE Используйте тот же запрос, но измените выходную часть на:
echo '<table><thead><tr><th>Email</th>'; for ($i=1;$i<5; $i++){ echo "<th>email $i</th>"; } echo "<th>Total (yes)</th>"; echo "<th>Total (no)</th>"; echo '</tr></thead><tbody>'; $result = mysql_query($sql); while ($row = mysql_fetch_array($result)) { $yesCount = 0; $noCount = 0; echo '<tr><td>'.$row['Contact_Email'].'</td>'; for ($i=1;$i<5; $i++){ echo '<td>'.(empty($row['email'.$i])?'no':'yes').'</td>'; if (empty($row['email'.$i])) { $noCount++; } else { $yesCount++; } } echo '<th>'.$yesCount.'</th>'; echo '<th>'.$noCount.'</th>'; echo '</tr>'; } echo '</tbody></table>';