2014-03-25 71 views
0

我有2個單獨的表,我需要同時查詢兩個表,以獲得正確的信息顯示。這些表是成員和職位。通過html表單,用戶輸入成員表的標準,然後我需要使用所有這些特定成員的主索引來查找由這些成員提交的所有帖子,然後對帖子表結果進行排序。結果將是兩個表格中的行的混合。兩個表都有名稱'id'的主索引。到目前爲止我想到的是:更正mysql查詢來查詢一個表,並提供另一個表查詢的信息

$sql_get_posts = mysqli_query($link, "(SELECT id, username FROM members WHERE active='y' AND gender='M' AND city='Yuma' AND state='Arizona') UNION (SELECT * FROM posts WHERE member_id='id' AND active='y' ORDER BY list_weight DESC)") or die(mysqli_error($link)); 

我得到的錯誤是「使用的SELECT語句有不同數量的列」。

我需要再通過兩個表中返回的結果中循環來填充用戶看到的內容:

<?php 
    while ($row = mysqli_fetch_array($sql_get_posts)) { 
    $post_id = $row['id']; //This should be the post primary index named 'id', not the member primary index also name 'id' 
    $member_id = $row['member_id']; //This is the member_id row in the post table referencing this particular member who wrote this post 
    $member_username = $row['username']; //This is a row stored in the member table 
    $title = $row['title']; //This is a row stored in post table 
    ******//and on and on getting rows from only the post table 
    } 

編輯我的SQL表:聯盟內

CREATE TABLE IF NOT EXISTS `members` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`username` varchar(20) NOT NULL, 
`age` varchar(3) NOT NULL, 
`gender` varchar(1) NOT NULL, 
`city` varchar(20) NOT NULL, 
`state` varchar(50) NOT NULL, 
`active` enum('y','n') NOT NULL DEFAULT 'y', 
`created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; 


CREATE TABLE IF NOT EXISTS `posts` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `member_id` int(11) NOT NULL, 
    `title` text NOT NULL, 
    `comments` enum('y','n') NOT NULL DEFAULT 'y', 
    `post_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    `list_weight` double NOT NULL, 
    `active` enum('y','n') NOT NULL DEFAULT 'y', 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=47 ; 
+0

顯示兩個表的表結構。 –

+0

僅當您在bot選擇子句中具有相同的列數時才能聯合工作。 –

+0

@BrokenHeartღ它在phpmyadmin。我會試着弄明白。 – user3423909

回答

0

使用join代替union,union假定你組合的表是相似的,而join則合併兩個表的列。

喜歡的東西:

SELECT members.id, members.username, posts.* 
FROM members 
INNER JOIN posts 
ON members.id = posts.member_id 
WHERE members.active='y' AND members.gender='M' AND members.city='Yuma' AND members.state='Arizona' 
ORDER BY posts.list_weight DESC 
+0

的條件下?更新了 –

+0

以添加where子句,排序依據和特定列名稱。 – Solaris

+0

@Solaris。這似乎工作。我很好奇,php/mysql如何知道我要求的行中的表主索引:$ post_id = $ row ['id'] ;,而不是同名的成員表主索引? – user3423909

0

SELECT語句必須具有相同的列數。這些列也必須具有相似的數據類型。另外,每個SELECT語句中的列必須以相同的順序排列。

但只選擇了2在第一次查詢的第二選擇查詢列和 「*」

+0

現在在所有響應之後實現這種類型。人們說我應該使用JOIN來代替。 – user3423909

0

使用加入

SELECT m.id, m.username,p.* FROM members m JOIN posts p on m.active='y' AND m.gender='M' AND m.city='Yuma' AND m.state='Arizona' and p.member_id='id' AND p.active='y' ORDER BY p.list_weight DESC 

,或者您可以使用

SELECT m.id, m.username,p.* FROM members m,posts p where m.active='y' AND m.gender='M' AND m.city='Yuma' AND m.state='Arizona' and p.member_id='id' AND p.active='y' ORDER BY p.list_weight DESC 
+0

我不是一個Mysql忍者。 m從哪裏來? – user3423909

+0

m是表成員的對象,在查詢'members m'和'posts p'中可以看到,所以我們可以簡單地使用像m.id,p.name這樣的對象來訪問列,所以在 –

相關問題