Как да вкарам една таблица в друга

dunix

Registered
Направил съм една таблица където е описано двата пола (мъж и жена).
В таблицата users съм направил колона gander.
Сега се пробвам да извлека от колоната gander информацията за пола и ми го показва с ID-то което съм дал.
Пробвам се да го изкарам така:

Код:
    $query = "SELECT users.gender1, gender1.gender_lebel " .
    "FROM users, ganger1" .
    "WHERE users.gender1 = gender1.gender_id " .
    "ORDER BY ganger1";

Но къде ми е грешката, че не се получава, а ми пише
Not unique table/alias: 'users'
 
$q = "SELECT * FROM users as u, genger as g where ...... "

* - Промени каквото искаш да вземеш от двете таблици,
пример ако искаш да вземеш name от таблица users правиш така u.name
това as разменя users и genger със съответните букви
 
Имам база данни ganger1.
Вътре имам 2 таблици, едната е id (gender_id), а другата е полът(gender_lebel).
В базата данни users имам таблица ganger1.

Искам да направя така, че когато изведа Пол с "$ganger1" да не ми показва id-то от базата данни users, а да ми показва полът(gender_lebel) от базата данни ganger1.

Ето това ми е формата с която разглеждам данните:

Код:
<?php
include "connect.php";
$query = mysql_query("SELECT * FROM `users`");
$red2 = mysql_num_rows($query);
if ($red2 != NULL) {
$users = $_GET['id'];
if($users == NULL) {
echo ('
    Info <br /><center>members not found!</center>
    ');
}
 else {
if (!isset($users)){
$getusername = mysql_query("SELECT * from users order by id asc");
while ($user = mysql_fetch_array($getusername)) {
}}
else {
$getusername = mysql_query("SELECT * from users where id = '$users'");
$usernamen = mysql_num_rows($getusername);
if ($usernamen == 0) {
echo ("No members");
}
else {
$profile = mysql_fetch_array($getusername);
$username = $profile['username'];
$email = $profile['email'];
$gender1 = $profile['gender1'];
echo ("Info for $username <br />
    Email: $email<br />
    Ganger: $gender1
");
}}
}}
?>

Как да стане ?
 
аз не мога да разбера само защо ги записваш в две различни База данни а не ги правиш в една и за какво ти е полът да ти е отделно просто направи едно поле допълнително в усерс и там ги записвай кой какав пол е и при ивеждането на резултати ше ти е по лесно.


Иначе по принцип това което искаш е за мен специално малко безмиследно. Пъвро трябва да селектираш двете имена на базите данни под различни променливи или пример

define("SERVER", "localhost");
define("USER", "");
define("PASS", "");
define("DB_NAME", "users");
define("DB_NAME2", "");
$c = mysql_connect(SERVER, USER, PASS) or die(mysql_error());
mysql_select_db(DB_NAME, $c) or die(mysql_error());
$q = "SELECT * FROM "Table" WHERE edi si kakwo";
$result = mysql_query ($q,$c);

$c2 = mysql_connect(SERVER, USER, PASS) or die(mysql_error());
mysql_select_db(DB_NAME2, $c2) or die(mysql_error());
$q = "SELECT * FROM "Table" WHERE edi si kakwo";
$result = mysql_query ($q,$c2);

и така изкарваш какво искаш резултати от базите данни и ги обединяваш.Но да ти кажа това е много усложнена работа и донякъде неправилна, понеже забавяш кода, при 10 кънекции няма да имаш проблем но си представи 500 кън. в минута примерно. Много ще ти се бави скрипта и ще ти изкарва грешки като побъркано
 
Karcho каза:
SELECT * FROM users LEFT JOIN ganger1 ON (`users`.`gender1` = `genger1`.`gender_id`) ...

:idea:
Направих кода така и ми дава на три реда нещата :|
Код:
<?php
include "connect.php";
$query = mysql_query("SELECT * FROM `users`");
$red2 = mysql_num_rows($query);
if ($red2 != NULL) {
$users = $_GET['id'];
if($users == NULL) {
echo ('
    Info <br /><center>members not found!</center>
    ');
}
 else {
if (!isset($users)){
$getusername = mysql_query("SELECT * from users order by id asc");
while ($user = mysql_fetch_array($getusername)) {
}}
else {
$getusername = mysql_query("SELECT * from users where id = '$users'");
$usernamen = mysql_num_rows($getusername);
if ($usernamen == 0) {
echo ("No members");
}
else {
$query = "SELECT * FROM users LEFT JOIN gender1 ON (`users`.`gender1` = `gender1`.`gender_id`)";
$results = mysql_query($query) or die (mysql_error());
$profile = mysql_fetch_array($getusername);
$username = $profile['username'];
$email = $profile['email'];
$gender1 = $profile['gender1'];
echo "Info for $username <br />Email: $email<br />";
while ($row = mysql_fetch_assoc($results)) {
	foreach ($row as $value) {
    echo "Ganger: $gender1"; };
}} }
}}
?>
 
Karcho каза:
Тоест?

f9c185d186ebe3b7.png


Също пак ми дава id-то на ganger, а не името от базата данни.
това "Ganger: 1" трябва да е "Ganger: мъж"
 
dunix, я най-добре си дай структурата на таблиците (ако може със screenshot), защото усещам, че на таблица викаш база данни.

И ако може след като дадеш картинки на таблиците да кажеш какво точно искаш, но като краен резултат от заявката, че аз лично не ти схващам обясненията.
 
adrian каза:
dunix, я най-добре си дай структурата на таблиците (ако може със screenshot), защото усещам, че на таблица викаш база данни.

И ако може след като дадеш картинки на таблиците да кажеш какво точно искаш, но като краен резултат от заявката, че аз лично не ти схващам обясненията.

Да, прав си. На таблиците викам бана данни, а на колоните викам таблици.

Давам ги като SQL и снимки.

таблицата users:
Код:
CREATE TABLE IF NOT EXISTS `users` (
  `id` int(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(64) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `password` varchar(64) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `email` varchar(64) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `gender1` int(3) NOT NULL,
  `form` int(3) NOT NULL,
  `day` int(3) NOT NULL,
  `month` int(3) NOT NULL,
  `year` int(3) NOT NULL,
  `city` int(3) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4 ;

http://store.picbg.net/pubpic/2B/6F/65a1145805782b6f.png

Таблицата gender1:
Код:
CREATE TABLE gender1 (
    gender_id int (11) unsigned NOT NULL auto_increment,
    gender_lebel varchar(100) NOT NULL,
    PRIMARY KEY (gender_id)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
INSERT INTO gender1 (gender_id, gender_lebel) VALUES
(1, 'мъж'),
(2, 'жена');

http://store.picbg.net/pubpic/99/BA/2db814bd235999ba.png


Искам да изкарвам информацията на потребителят.
Като изкарам Ganger ми го пише Ganger и id-то от таблицата users
Аз искам да взима id-то от таблицата users, да чете таблицата gender1 - там да взима не id-то, а на отговарящото id името (съответно на 1 ще е мъж на 2 ще е жена) и да го изписва Ganger: мъж.
 
SELECT
users.id, users.username, users.email, users.form, users.day, users.month, users.year, users.city, gender1.gender_label
FROM users LEFT OUTER JOIN gender1
ON users.gender1 = gender1.gender_id

Това е sql заявката. Другото си е изкарване на резултатите както е от нормална заявка.

Можеш и така да го направиш, но това ще ти изкара всички полета, от users, а не виждам смисъл да изкарваш паролата и числото за пол:

SELECT
users.*, gender1.gender_label
FROM users LEFT OUTER JOIN gender1
ON users.gender1 = gender1.gender_id
 
adrian каза:
SELECT
users.id, users.username, users.email, users.form, users.day, users.month, users.year, users.city, gender1.gender_label
FROM users LEFT OUTER JOIN gender1
ON users.gender1 = gender1.gender_id

Това е sql заявката. Другото си е изкарване на резултатите както е от нормална заявка.

Направих го така за видя и сега намалих редовете на показване http://store.picbg.net/pubpic/39/EA/3305fb5bd60539ea.png но пак ми ги показва с id-то.

adrian каза:
Можеш и така да го направиш, но това ще ти изкара всички полета, от users, а не виждам смисъл да изкарваш паролата и числото за пол:

SELECT
users.*, gender1.gender_label
FROM users LEFT OUTER JOIN gender1
ON users.gender1 = gender1.gender_id

Аз не искам да изкрвам нито паролата нито числото за пол.
Искам да изкарам името (genger_lebel) на полът, а не числото му.




Искам след като изведа Ganger да ми пише полът, а не числото.
Нещо такова :
Info for 123455
Email: scenebg1@abv.bg
Ganger: мъж
Вмомента излиза така:
Info for 123455
Email: scenebg1@abv.bg
Ganger: 1 (с много Ganger - снимката горе)
 
SELECT
users.id, users.username, users.email, users.form, users.day, users.month, users.year, users.city, gender1.gender_label
FROM users LEFT OUTER JOIN gender1
ON users.gender1 = gender1.gender_id

Поствам пак същата заявка, защото съм сигурен, че работи и грешката вече е при теб. Ттова, което ти трябва се пази в променлива gender_label.

Или кодът ти би изглеждал така:
$result = mysql_query("SELECT
users.id, users.username, users.email, users.form, users.day, users.month, users.year, users.city, gender1.gender_label
FROM users LEFT OUTER JOIN gender1
ON users.gender1 = gender1.gender_id")
or die("Error");
while($row = mysql_fetch_array($result)) {
echo 'ID: '.$row['id'].'<br />';
echo 'Username: '.$row['username'].'<br />';
echo 'Email: '.$row['email'].'<br />';
echo 'Form: '.$row['form'].'<br />';
echo 'Day: '.$row['day'].'<br />';
echo 'Month: '.$row['month'].'<br />';
echo 'Year: '.$row['year'].'<br />';
echo 'City: '.$row['city'].'<br />';
echo 'Gender: '.$row['gender_label'].'<br />';
}
 
http://store.picbg.net/pubpic/64/0B/dd50a1eb63c3640b.png

Погледни, защо не ми се показва в Ganger полът на потребителят.

И още един въпрос... защо ми се показват всичките потребители :|, аз искам само този на който съм дал id-то(users.id) му горе.

Ето го целия код на файла users.php:

Код:
<?php
include "connect.php";
$query = mysql_query("SELECT * FROM `users`");
$red2 = mysql_num_rows($query);
if ($red2 != NULL) {
$users = $_GET['id'];
if($users == NULL) {
echo ('
    Info <br /><center>members not found!</center>
    ');
}
 else {
if (!isset($users)){
$getusername = mysql_query("SELECT * from users order by id asc");
while ($user = mysql_fetch_array($getusername)) {
}}
else {
$getusername = mysql_query("SELECT * from users where id = '$users'");
$usernamen = mysql_num_rows($getusername);
if ($usernamen == 0) {
echo ("No members");
}
else {
$result = mysql_query("SELECT 
users.id, users.username, users.email, users.form, users.day, users.month, users.year, users.city, gender1.gender_lebel 
FROM users LEFT OUTER JOIN gender1 
ON users.gender1 = gender1.gender_id") 
or die("Error"); 
while($row = mysql_fetch_array($result)) { 
echo 'ID: '.$row['id'].'<br />'; 
echo 'Username: '.$row['username'].'<br />'; 
echo 'Email: '.$row['email'].'<br />'; 
echo 'Form: '.$row['form'].'<br />'; 
echo 'Day: '.$row['day'].'<br />'; 
echo 'Month: '.$row['month'].'<br />'; 
echo 'Year: '.$row['year'].'<br />'; 
echo 'City: '.$row['city'].'<br />'; 
echo 'Gender: '.$row['gender_label'].'<br /><br />'; 
}} }
}}
?>
 
В края на заявката добави WHERE users.id = {$proneliavata_s_id}

А не ти се показва полът, заради някаква грешка в името на полето. Погледни може да съм сбъркал, но заявката си е точна и работи. Вече гледай в имената на $row[''] може да си сбъркал. :) Кодът ти ми се вижда голяма бъркотия :shock:
 
Сега вече ми се показва полът след като прегледах кода и го направих, благодарение на теб, да показва един потребител, но проблема вече е следния... - показва ми потребител само с едно id. Сменям горе id-тата и то продължава да ми показва потребителят с id 3 :!:

http://store.picbg.net/pubpic/00/7F/70f7fd21e2a2007f.png
Забележи какво пише долу на Info, какво е ID-то и погледни в адрес бара какво е ID-то

Код:
<?php
include "connect.php";
mysql_query("SET CHARACTER SET utf8");
$query = mysql_query("SELECT * FROM `users`");
$red2 = mysql_num_rows($query);
if ($red2 != NULL) {
$users = $_GET['id'];
if($users == NULL) {
echo ('
    <center>Info: <br />members not found!</center>
    ');
}
 else {
if (!isset($users)){
$getusername = mysql_query("SELECT * from users order by id asc");
while ($user = mysql_fetch_array($getusername)) {
}}
else {
$getusername = mysql_query("SELECT * from users where id = '$users'");
$usernamen = mysql_num_rows($getusername);
if ($usernamen == 0) {
echo ("No members");
}
else {
$result = mysql_query("SELECT 
users.id, users.username, users.email, users.form, users.day, users.month, users.year, users.city, gender1.gender_lebel 
FROM users LEFT OUTER JOIN gender1 
ON users.gender1 = gender1.gender_id
WHERE users.id = ($red2)") 
or die("Error"); 
while($row = mysql_fetch_array($result)) { 
echo 'ID: '.$row['id'].'<br />'; 
echo 'Username: '.$row['username'].'<br />'; 
echo 'Email: '.$row['email'].'<br />'; 
echo 'Form: '.$row['form'].'<br />'; 
echo 'Day: '.$row['day'].'<br />'; 
echo 'Month: '.$row['month'].'<br />'; 
echo 'Year: '.$row['year'].'<br />'; 
echo 'City: '.$row['city'].'<br />'; 
echo 'Gender: '.$row['gender_lebel'].'<br /><br />'; 
}} }
}}
?>
 
Ами $red2 ти е равно на броя записи в таблицата. Да предположа ли колко са - 3?

$red2 = mysql_num_rows($query);

В WHERE трябва да сложиш $users променливата. Друг е въпросът, че сега не ми се гледа дали е зададена в място, където може да се види от този else.

Или SQL трябва да ти стане така:

$result = mysql_query("SELECT
users.id, users.username, users.email, users.form, users.day, users.month, users.year, users.city, gender1.gender_lebel
FROM users LEFT OUTER JOIN gender1
ON users.gender1 = gender1.gender_id
WHERE users.id = '{$users}'") or die("ERROR");

Къдравите скоби не са задължителни, но са добра практика. Влагането на толкова много if също не е хубаво :)
 
adrian каза:
Ами $red2 ти е равно на броя записи в таблицата. Да предположа ли колко са - 3?

$red2 = mysql_num_rows($query);

В WHERE трябва да сложиш $users променливата. Друг е въпросът, че сега не ми се гледа дали е зададена в място, където може да се види от този else.

Код:
<?php
include "connect.php";
mysql_query("SET CHARACTER SET utf8");
$query = mysql_query("SELECT * FROM `users`");
$red2 = mysql_num_rows($query);
if ($red2 != NULL) {
$users = $_GET['id'];
if($users == NULL) {
echo ('
    Info <br /><center>members not found!</center>
    ');
}
else {
if (!isset($users)){
$getusername = mysql_query("SELECT * from users order by id asc");
while ($user = mysql_fetch_array($getusername)) {
}}
else {
$getusername = mysql_query("SELECT * from users where id = '$users'");
$usernamen = mysql_num_rows($getusername);
if ($usernamen == 0) {
echo ("No members");
}
else {
$profile = mysql_fetch_array($getusername);
$username = $profile['username'];
$email = $profile['email'];
$gender1 = $profile['gender1'];
$a = mysql_query("SELECT * FROM gender1 WHERE gender_id='$gender1'") or die(mysql_error());
$b = mysql_fetch_array($a);
$pol = $b['gender_lebel'];
echo ("Info for $username <br />
    Email: $email<br />
    Ganger: $pol
");
}}
}}
?>

Ето това ми трябваше.
Давам ти точка и Благодаря за помощта която ми оказа :?:
 

Back
Горе