Problem z pobieraniem danych z 2 tabel


(Konradnie2) #1

Witam.

Mam taki kod:

<?php 

		include('dodaj/conf.php');


		$result=mysql_query("SELECT * FROM `roboty` WHERE pkt > '$pkt' ");

		$num=mysql_numrows($result);

		$i=0;

		while ($i < $num) {

		$pkt=mysql_result($result,$i,"pkt");

		$robot=mysql_result($result,$i,"typ");

		$poziom=mysql_result($result,$i,"level");

		$energia=mysql_result($result,$i,"energia");



		echo(" 

$pkt
$robot
brak
$poziom
$energia



    		    ");

		$i++;

		}



?>

ale mam problem bo w tabeli roboty nie ma pola 'pkt'. Pole 'pkt' jest w tabeli 'users'. Kod wyświetla wszystko co ma wyświetlić ale przy polu pkt jest błąd.

Jak to poprawić żeby było wszystko dobrze??

Proszę pomóżcie.


(ra-v) #2

http://dev.mysql.com/doc/refman/5.0/en/join.html

http://dev.mysql.com/doc/refman/5.0/en/subqueries.html


(R@z0r) #3

Takie coś mu na pewno nie pomoże.

Nie znam nazw tabel i kiepsko jak nie pokazałeś db, ale tutaj możesz użyć LEFT JOIN lub złączyć tablice przez odniesienie.


(Konradnie2) #4

Mam tabele "roboty" i w niej pola:

id, czyj, nazwa, typ, level, energia, wytrzymalosc

i 2 tabela "users":

id, login, pass, email, pkt

Pola 'czyj' i login mają te same dane. one łącza tabele.

Musze w pętli wyświetlić wszystkie dane i niestety nie wiem jak użyć JOIN


(kostek135) #5

Nie wiem do końca co chcesz wyświetlić (bo nie podałeś co chcesz osiągnąć).

SELECT r.id, r.czyj, r.nazwa, r.typ, r.level, r.energia, r.wytrzymalosc FROM roboty r, users u WHERE r.czyj = u.login AND u.pkt > $z

Ale może o to chodzi: wyświetli te roboty, które należą do usera i ten user ma więcej punktów niż


(Konradnie2) #6

Zapomniałem o jednej rzeczy.

W tabeli "roboty" mam jeszcze pole 'aktywny'.

Zapytanie ma wyświetlić wszystkie roboty aktywne wszystkich userów których pkt <$pkt.

Każdy user ma tylko 1 aktywnego robota.

Wcześniej nie napisałem bo chciałem wyświetlić wszystkie ale jednak potrzebuje tylko aktywne.

-- Dodane 11.02.2012 (So) 12:39 --

i w polu 'aktywny' jest wartość 'tak' lub 'nie'


(kostek135) #7

Przerób moje zapytanie, wystarczy dodać warunek

... AND r.aktywny = 'tak'

Zakładając, że aktywność rozwiązałeś jakimś dyskryminatorem: 1, 0 / tak, nie, / t, n / etc.


(Konradnie2) #8

Ok.

Wielkie dzięki.

A mogę zrobić takie zapytanie:

SELECT * FROM roboty r, users u WHERE r.czyj = u.login AND u.pkt > $z AND r.aktywny = 'tak'

(kostek135) #9

Możesz, ale to pobiera też dane n/t usera, których w skrypcie nie wykorzystujesz, ja bym nie męczył bazy i skryptu. Zawsze wybieraj tylko te wartości (kolumny) z których korzystasz.


(Konradnie2) #10

Aha ok czyli mam to twoje zapytanie wstawić do mojej pętli i ma działać tak??


(kostek135) #11

Nie testowałem, ale powinno jak dostaniesz jakiś błąd to wklei postaram się naprawić. W ogóle piszę na Oracle, więc może coś nie działać pod MySQL.


(Konradnie2) #12

ok zaraz zobacze

-- Dodane 11.02.2012 (So) 12:54 --

Warning: mysql_numrows() expects parameter 1 to be resource, boolean given in /home/robotica/domains/robotica.chmurka.pl/public_html/walka.php on line 61

cały czas mam ten błąd.

zrobiłem tak:

<?php 

		include('dodaj/conf.php');


		$result=mysql_query("SELECT r.typ, r.level, r.energia, r.pkt FROM roboty r, users u WHERE r.czyj = u.login AND u.pkt > $pkt");

		$num=mysql_numrows($result);

		$i=0;

		while ($i < $num) {

		$pkt=mysql_result($result,$i,"r.pkt");

		$robot=mysql_result($result,$i,"r.typ");

		$poziom=mysql_result($result,$i,"r.level");

		$energia=mysql_result($result,$i,"r.energia");



		echo("

może coś źle??


(kostek135) #13

http://php.net/manual/en/function.mysql-num-rows.php

Nie brakuje podkreślenia w kodzie php w tym num_rows?


(Konradnie2) #14

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /home/robotica/domains/robotica.chmurka.pl/public_html/walka.php on line 61

dalej błąd.


(kostek135) #15

r.pkt -> u.pkt user ma punkty nie robot


(Konradnie2) #16

SELECT r.typ, r.level, r.energia, u.pkt FROM roboty r, users u WHERE r.czyj = u.log

Mam tak ale cały czas błąd wyskakuje.

Usunołem troche żeby zobaczyć czy nie zniknie błąd ale dalej tak samo. potem dodam


(kostek135) #17

W users mówiłeś, że masz pole login nie log. Nie wiem już co robisz.


(Konradnie2) #18

mam log i wszystkie nazwy sie zgadzają i cały czas błąd


(kostek135) #19

Być może MySQL wymaga AS przy nadawaniu aliasów.

SELECT r.typ, r.level, r.energia, u.pkt FROM roboty AS r, users AS u WHERE r.czyj = u.log

(Konradnie2) #20

Dalej błąd.

<?php 

		include('dodaj/conf.php');


		$result=mysql_query("SELECT r.typ, r.level, r.energia, u.pkt FROM roboty AS r, users AS u WHERE r.czyj = u.log");

		$num=mysql_num_rows($result);

		$i=0;

		while ($i < $num) {

		$pkt=mysql_result($result,$i,"u.pkt");

		$robot=mysql_result($result,$i,"r.typ");

		$poziom=mysql_result($result,$i,"r.level");

		$energia=mysql_result($result,$i,"r.energia");



		echo("

-- Dodane 11.02.2012 (So) 13:32 --

jak zrobię tak:

$result=mysql_query("SELECT r.typ, r.level, r.energia, u.pkt FROM roboty AS r, users AS u WHERE r.czyj = u.log") or die ('błąd');

to wyświetla mi blad.

Nie wiem czy to coś pomoże moze coś źle napisałem.