4 Wrz 2005, 11:33
Przemyslaw Kempinski

Witam,

Mam maly problem z poprawnym wyswietleniem danych z bazy danych mysql.
Musze tu zastosowac jako taka relacje. Ponizszy odcinek kodu ma
wyswietlac wszystkich kierowcow z tableli kierowcy, ktorym id
odpowiada id_kierowcy przypisany do karty. Ciezko to opisac w kazdym
badz razie nie wiem jak wykorzystac tablice $rekord['kierowca'] (id
kierowcy z tablicy kierowcy), ktora generuje mi pierwsze zapytnie
mysql (z tablicy karty) do wygenerowania listy kierowcow (wszystkich-
teraz wyswietla sie tylko jeden :/) z tablicy kierowcy. Jak ktos
zrozumial to bede wdzieczny za wskazowk.

echo '<tr<td<fontWszystkie oryginalne autografy:</font</td<td
valign="top"<select name="drivers_org"';
echo '<font<option value="Wybierz kierowcę"Wybierz</option';
$zapytanie="SELECT * FROM karty where typ=0";
$sukces=mysql_query($zapytanie);
while($rekord = mysql_fetch_array($sukces))
{
//$id_kierowcy=$rekord['kierowca'];
$rekord['kierowca'];

}



$zapytanie="SELECT * FROM kierowcy where
id_kierowcy=$rekord['kierowca']";
$sukces=mysql_query($zapytanie);
while($rekord = mysql_fetch_array($sukces))
{
echo "<option
value=\"".$rekord['id_kierowcy']."\"".$rekord['nazwisko']."
".$rekord['imie']."</option";

}
}



echo '</font';
echo '</td<td valign="top"';
echo '<input name="submit" type=submit value="Pokaz"';
echo '</select</form</td</tr';




4 Wrz 2005, 11:51
jedrus


Witam,

Mam maly problem z poprawnym wyswietleniem danych z bazy danych mysql.
Musze tu zastosowac jako taka relacje. Ponizszy odcinek kodu ma
wyswietlac wszystkich kierowcow z tableli kierowcy, ktorym id
odpowiada id_kierowcy przypisany do karty.



a ne latwiej:

SELECT * FROM kierowcy RIGHT JOIN karty
         ON kierowcy.id = karty.id_kierowcy

to od razu da Ci wykaz tych kierowców którzy mają
jakieś karty.

czyli:
$wynik = mysql_query('SELECT * FROM kierowcy
                      RIGHT JOIN karty
                      ON kierowcy.id =
karty.id_kierowcy');

/* jesli ma byc warunek typ=0 dajesz linie ponizej
zamiast poprzedniej:
$wynik = mysql_query('SELECT * FROM kierowcy
                      RIGHT JOIN karty
                      ON kierowcy.id = karty.id_kierowcy
                       WHERE karty.typ = "0"');
*/

i dalej jedziesz:
$wynik = mysql_fetch_array($wynik);

$ile = mysql_num_rows($wynik);
for($i = 0; $i < $ile; $i++)
{
        $kierowca = mysql_fetch|_array($wynik);
        printf('%s - %s - karta: %s<br',
                $kierowca['kierowcy.id'],
                $kierowca['kierowcy.nazwisko'],
                $kierowca['karty.id_karty']);

}



oczywiscie sformatuj sobie to odpowiednio, dorzuc
kontrole bledow, i oczywiscie odpowiednio
pozamieniaj nazwy atrybutow i tabel z baz danych
:) zamiast for mozesz uzyc while i zmienic
zapytanie... chyba o to Ci chodzilo?

pzdr
jedrus4


4 Wrz 2005, 12:08
Przemyslaw Kempinski


<cut

oczywiscie sformatuj sobie to odpowiednio, dorzuc
kontrole bledow, i oczywiscie odpowiednio
pozamieniaj nazwy atrybutow i tabel z baz danych
:) zamiast for mozesz uzyc while i zmienic
zapytanie... chyba o to Ci chodzilo?



Pewnie ze oto :))) Dzieki wielkie. Mam zaleglosci z mysql niezle :-))
o select musze troche poczytac. Znasz moze jakiegos linka z
zapytaniami bardziej rozbudowanymi i laczeniem tabel?


4 Wrz 2005, 12:14
jedrus


Pewnie ze oto :))) Dzieki wielkie. Mam zaleglosci z mysql niezle :-))
o select musze troche poczytac. Znasz moze jakiegos linka z
zapytaniami bardziej rozbudowanymi i laczeniem tabel?



dziala chociaz? bo pisalem z glowy calkiem i
raczej bez zastanowienia ;-)

podesle Ci troche materialow jesli chcesz - daj
znac juz na priv
pzdr




4 Wrz 2005, 12:17
Przemyslaw Kempinski


<cut

oczywiscie sformatuj sobie to odpowiednio, dorzuc
kontrole bledow, i oczywiscie odpowiednio
pozamieniaj nazwy atrybutow i tabel z baz danych
:) zamiast for mozesz uzyc while i zmienic
zapytanie... chyba o to Ci chodzilo?



No i jeszcze jednen maly problem czy w mysql jest jakies parametr
ktory by nie powtarzal rekordow? Tzn. chodzi o to ze kart moze byc
wiele przypisanych do jednego keirowcy i ta skaldnia:

SELECT * FROM kierowcy RIGHT JOIN karty ON
kierowcy.id_kierowcy=karty.kierowca WHERE karty.typ=0

Wyswietla za kazdym razem kierowce- jak bdzie keirowca mial
przypisanych 10 kart to wyswietli go 10 razy, a ja bym chcial dostac
tylko jeden raz, ze ma przynajmniej jedna karte typ=0.


4 Wrz 2005, 12:54
Przemyslaw Kempinski


SELECT * FROM kierowcy RIGHT JOIN karty ON
kierowcy.id_kierowcy=karty.kierowca WHERE karty.typ=0

Wyswietla za kazdym razem kierowce- jak bdzie keirowca mial
przypisanych 10 kart to wyswietli go 10 razy, a ja bym chcial dostac
tylko jeden raz, ze ma przynajmniej jedna karte typ=0.



Uscisle jeszce bardziej. Aby nie powtarzaly sie wyniki sluzy polecenie
SELECT DISTINCT ale jak go uzyc zeby nie powtarzaly sie wyniki z dwoch
pol. Tzn. Nazwisko kierowcy moze sie powtorzyc ale tylko w przypadku
gdy imie jest rozne... :/


4 Wrz 2005, 13:01
jedrus


Uscisle jeszce bardziej. Aby nie powtarzaly sie wyniki sluzy polecenie
SELECT DISTINCT ale jak go uzyc zeby nie powtarzaly sie wyniki z dwoch
pol. Tzn. Nazwisko kierowcy moze sie powtorzyc ale tylko w przypadku
gdy imie jest rozne... :/



ale zaraz zaraz... przeciez masz powiązane 2
tabele przez id kierowcy prawda?
tzn. kierowca ma unikalne id i karta ma przypisane
to id.... możesz zrobić grupowanie po id kierowcy,
czyli:

SELECT * FROM kierowcy RIGHT JOIN karty
         ON kierowcy.id_kierowcy = karty.kierowca
         WHERE karty.typ=0
         GROUP BY id_kierowcy

poza tym NTG ;-)
pzdr


8 Wrz 2005, 08:52
Hilarion

No i jeszcze jednen maly problem czy w mysql jest jakies parametr
ktory by nie powtarzal rekordow? Tzn. chodzi o to ze kart moze byc
wiele przypisanych do jednego keirowcy i ta skaldnia:

SELECT * FROM kierowcy RIGHT JOIN karty ON
kierowcy.id_kierowcy=karty.kierowca WHERE karty.typ=0

Wyswietla za kazdym razem kierowce- jak bdzie keirowca mial
przypisanych 10 kart to wyswietli go 10 razy, a ja bym chcial dostac
tylko jeden raz, ze ma przynajmniej jedna karte typ=0.



np.:

SELECT DISTINCT kierowcy.*
FROM kierowcy RIGHT JOIN karty ON kierowcy.id_kierowcy = karty.kierowca
WHERE karty.typ = 0
ORDER BY nazwisko, imie, id_kierowcy

lub np.:

SELECT DISTINCT id_kierowcy, imie, nazwisko
FROM kierowcy RIGHT JOIN karty ON kierowcy.id_kierowcy = karty.kierowca
WHERE karty.typ = 0
ORDER BY nazwisko, imie, id_kierowcy

Generalnie DISTINCT zwraca tylko unikalne wyniki, ale unikalność
jest określana na wszystkich zwracanych kolumnach. Twój poprzedni
SELECT wybierał wszystkie kolumny z tabel "kierowcy" i "karty"
stąd DISTINCT nic nie robił, bo każdy zwrócony rekord czymś się
różnił (kierowcą lub kartą).

Wynik można również uzyskać korzystając z grupowania (GROUP BY),
ale powinieneś użyć go raczej w sposób działający dla wszystkich
silników SQL, czyli:

SELECT id_kierowcy, imie, nazwisko, count(*) AS ilosc_kart
FROM kierowcy RIGHT JOIN karty ON kierowcy.id_kierowcy = karty.kierowca
WHERE karty.typ = 0
GROUP BY id_kierowcy, imie, nazwisko
ORDER BY nazwisko, imie, id_kierowcy

Czym to się różni od rozwiązania podanego przez Jędrusia? Tym, że
on podał w klauzuli GROUP BY tylko jedną kolumnę, a większość
silników SQL wymaga podania wszystkich kolumn, które są zawarte
w wyniku, a nie biorą udziału w agregacjach. Wariant Jędrusia
pewnie jakoś zadziała w MySQL i jest niejednokrotnie wygodniejszy
do stosowania, ale nie jest przenośny i może powodować nieoczekiwane
rezultaty (zależnie od struktury danych).

Hilarion


php + redhat 7.2 || redhat 7.1
nowy php nowy problem ;)
PHP i pole <select></select>
jak uzyskac w php '/' ? [newbe]
kompilacja PHP z imap'em i imap-ssl
PDO - inny wynik w PHP inny z phpmyadmin
Zend Encoder vs ionCube PHP Encoder 3
  • cent tapety
  • neostrada zte zxdsl852 jak to uruchomic
  • ebay nr tel
  • internetowe radio centrum rzeszow
  • blacha;panelowa
  • ile kosztuje skalniak
  • profimail;gmail;konfiguracja
  • tiesto;gelredome
  • szczeniaki;wygaszacz;ekranu
  • Zestawienie wypowiedzi z for internetowych ; Index