Saraka ya Nakala
Hifadhidata ya MySQLutumiaji wa jedwali nyingi za ndani? kushoto kushoto jiunge na ufanisi wa matumizi
Mysql matumizi ya uhusiano
Katika sura zilizopita, tumejifunza jinsi ya kusoma data kutoka kwa meza moja, ambayo ni rahisi, lakini katika maombi halisi mara nyingi ni muhimu kusoma data kutoka kwa meza nyingi za data.
Katika sura hii tutakuonyesha jinsi ya kutumia JOIN ya MySQL kuuliza data katika jedwali mbili au zaidi.
Unaweza kutumia JIUNGE na Mysql katika SELECT, UPDATE na FUTA taarifa ili kujiunga na hoja za jedwali nyingi.
JIUNGE imegawanywa katika kategoria tatu zifuatazo kulingana na kazi yake:
- INNER JOIN (jiunge la ndani, au unganisha): Pata rekodi zilizo na sehemu zinazolingana katika jedwali mbili.
- LEFT JIUNGE (kushoto jiunge):Pata rekodi zote kwenye jedwali la kushoto, hata kama hakuna rekodi zinazolingana kwenye jedwali la kulia.
- KULIA JIUNGE (kulia jiunge): Kinyume na LEFT JOIN, inatumika kupata rekodi zote katika jedwali la kulia, hata kama hakuna rekodi zinazolingana katika jedwali la kushoto.
Kwa kutumia INNER JOIN katika Amri Prompt
Tuna majedwali mawili tcount_tbl na chenweiliang_tbl katika hifadhidata ya chenweiliang.Data ya meza mbili za data ni kama ifuatavyo:
Mfano
Jaribu mifano ifuatayo:
data ya mfano wa mtihani
mysql> use chenweiliang; Database changed mysql> SELECT * FROM tcount_tbl; +---------------+--------------+ | chenweiliang_author | chenweiliang_count | +---------------+--------------+ | 陈沩亮博客 | 10 | | chenweiliang.com | 20 | | Google | 22 | +---------------+--------------+ 3 rows in set (0.01 sec) mysql> SELECT * from chenweiliang_tbl; +-----------+---------------+---------------+-----------------+ | chenweiliang_id | chenweiliang_title | chenweiliang_author | submission_date | +-----------+---------------+---------------+-----------------+ | 1 | 学习 PHP | 陈沩亮博客 | 2017-04-12 | | 2 | 学习 MySQL | 陈沩亮博客 | 2017-04-12 | | 3 | 学习 Java | chenweiliang.com | 2015-05-01 | | 4 | 学习 Python | chenweiliang.com | 2016-03-06 | | 5 | 学习 C | FK | 2017-04-05 | +-----------+---------------+---------------+-----------------+ 5 rows in set (0.01 sec)
Ifuatayo tutatumia MySQLINNER JOIN (unaweza pia kuacha INNER na kutumia JOIN, athari ni sawa)Ili kuunganisha majedwali mawili yaliyo hapo juu ili kusoma thamani ya sehemu ya chenweiliang_count inayolingana na sehemu zote za chenweiliang_author katika jedwali la chenweiliang_tbl katika jedwali la tcount_tbl:
INNER JOIN
mysql> SELECT a.chenweiliang_id, a.chenweiliang_author, b.chenweiliang_count FROM chenweiliang_tbl a INNER JOIN tcount_tbl b ON a.chenweiliang_author = b.chenweiliang_author; +-------------+-----------------+----------------+ | a.chenweiliang_id | a.chenweiliang_author | b.chenweiliang_count | +-------------+-----------------+----------------+ | 1 | 陈沩亮博客 | 10 | | 2 | 陈沩亮博客 | 10 | | 3 | chenweiliang.com | 20 | | 4 | chenweiliang.com | 20 | +-------------+-----------------+----------------+ 4 rows in set (0.00 sec)
Taarifa ya SQL hapo juu ni sawa na:
WAPI kifungu
mysql> SELECT a.chenweiliang_id, a.chenweiliang_author, b.chenweiliang_count FROM chenweiliang_tbl a, tcount_tbl b WHERE a.chenweiliang_author = b.chenweiliang_author; +-------------+-----------------+----------------+ | a.chenweiliang_id | a.chenweiliang_author | b.chenweiliang_count | +-------------+-----------------+----------------+ | 1 | 陈沩亮博客 | 10 | | 2 | 陈沩亮博客 | 10 | | 3 | chenweiliang.com | 20 | | 4 | chenweiliang.com | 20 | +-------------+-----------------+----------------+ 4 rows in set (0.01 sec)
MySQL LEFT JIUNGE
MySQL left join ni tofauti na join. MySQL LEFT JOIN itasoma data yote kwenye jedwali la kushoto la data, hata kama jedwali la kulia halina data inayolingana.
Mfano
Jaribu mifano ifuatayo chenweiliang_tbl kwa meza ya kushoto,tcount_tbl Kwa jedwali la kulia, elewa utumizi wa MySQL LEFT JOIN:
KUSHOTO JIUNGE
mysql> SELECT a.chenweiliang_id, a.chenweiliang_author, b.chenweiliang_count FROM chenweiliang_tbl a LEFT JOIN tcount_tbl b ON a.chenweiliang_author = b.chenweiliang_author; +-------------+-----------------+----------------+ | a.chenweiliang_id | a.chenweiliang_author | b.chenweiliang_count | +-------------+-----------------+----------------+ | 1 | 陈沩亮博客 | 10 | | 2 | 陈沩亮博客 | 10 | | 3 | chenweiliang.com | 20 | | 4 | chenweiliang.com | 20 | | 5 | FK | NULL | +-------------+-----------------+----------------+ 5 rows in set (0.01 sec)
Katika mfano ulio hapo juu, LEFT JOIN inatumika, na taarifa hii itasoma data yote ya sehemu iliyochaguliwa ya jedwali la data chenweiliang_tbl upande wa kushoto, hata kama hakuna thamani ya sehemu inayolingana ya chenweiliang_author kwenye jedwali tcount_tbl upande wa kulia.
MySQL HAKI JIUNGE
MySQL RIGHT JOIN itasoma data zote kwenye jedwali la data upande wa kulia, hata kama hakuna data inayolingana kwenye jedwali lililo upande wa kushoto.
Mfano
Jaribu mifano ifuatayo chenweiliang_tbl kwa meza ya kushoto,tcount_tbl Kwa jedwali linalofaa, elewa utumizi wa MySQL RIGHT JOIN:
HAKI JIUNGE
mysql> SELECT a.chenweiliang_id, a.chenweiliang_author, b.chenweiliang_count FROM chenweiliang_tbl a RIGHT JOIN tcount_tbl b ON a.chenweiliang_author = b.chenweiliang_author; +-------------+-----------------+----------------+ | a.chenweiliang_id | a.chenweiliang_author | b.chenweiliang_count | +-------------+-----------------+----------------+ | 1 | 陈沩亮博客 | 10 | | 2 | 陈沩亮博客 | 10 | | 3 | chenweiliang.com | 20 | | 4 | chenweiliang.com | 20 | | NULL | NULL | 22 | +-------------+-----------------+----------------+ 5 rows in set (0.01 sec)
RIGHT JOIN inatumika katika mfano ulio hapo juu, taarifa hii itasoma data yote ya sehemu iliyochaguliwa ya jedwali la data tcount_tbl upande wa kulia, hata kama hakuna thamani ya sehemu inayolingana ya chenweiliang_author katika jedwali chenweiliang_tbl upande wa kushoto.
Kutumia JOIN katika hati ya PHP
Kitendaji cha mysqli_query() kinatumika katika PHP kutekeleza taarifa za SQL, unaweza kutumia taarifa ya SQL sawa na hapo juu kama kigezo cha kitendakazi cha mysqli_query().
Jaribu mfano ufuatao:
MySQL ORDER BY mtihani:
<? php $dbhost = 'localhost:3306'; // mysql服务器主机地址 $dbuser = 'root'; // mysql用户名 $dbpass = '123456'; // mysql用户名密码 $conn = mysqli_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('连接失败: ' . mysqli_error($conn)); } // 设置编码,防止中文乱码 mysqli_query($conn , "set names utf8"); $sql = 'SELECT a.chenweiliang_id, a.chenweiliang_author, b.chenweiliang_count FROM chenweiliang_tbl a INNER JOIN tcount_tbl b ON a.chenweiliang_author = b.chenweiliang_author'; mysqli_select_db( $conn, 'chenweiliang' ); $retval = mysqli_query( $conn, $sql ); if(! $retval ) { die('无法读取数据: ' . mysqli_error($conn)); } echo '<h2>陈沩亮博客 MySQL JOIN 测试<h2>'; echo '<table border="1"><tr><td>教程 ID</td><td>作者</td><td>登陆次数</td></tr>'; while($row = mysqli_fetch_array($retval, MYSQL_ASSOC)) { echo "<tr><td> {$row['chenweiliang_id']}</td> ". "<td>{$row['chenweiliang_author']} </td> ". "<td>{$row['chenweiliang_count']} </td> ". "</tr>"; } echo '</table>'; mysqli_close($conn); ?>
Hope Chen Weiliang Blog ( https://www.chenweiliang.com/ ) ilishiriki "Matumizi ya jedwali nyingi za uunganisho wa ndani wa hifadhidata ya MySQL? kushoto Kushoto Jiunge na Ufanisi wa Matumizi", itakusaidia.
Karibu kushiriki kiungo cha makala hii:https://www.chenweiliang.com/cwl-488.html
Karibu kwenye chaneli ya Telegramu ya blogu ya Chen Weiliang ili kupata masasisho mapya zaidi!
📚 Mwongozo huu una thamani kubwa, 🌟Hii ni fursa adimu, usiikose! ⏰⌛💨
Share na like ukipenda!
Kushiriki kwako na kupenda kwako ndio motisha yetu inayoendelea!