Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Jak do danych z mysql przypisać tekst.
Forum PHP.pl > Forum > Przedszkole
brzanek
Witam mam bazę danych a w niej kilka tabel.

Do każdego city_id jest przypisany nr. miejscowości np. pod city_id jest przypisana miejscowość Warszawa. Na stronie chciałbym wyświetlić właśnie tą nazwą a nie sam nr. Jak to zrobić?
Jeszcze jedno jak zrobić aby nie powtarzała się ta sama nazwa city_id (nazwa miejscowości) Teraz to wygląda tak http://pogoda-zachodniopomorskie.pl/rekordy/index.php

Z góry dziękuję za pomoc.
nospor
Zeby połączyc dane z kilku tabel, w tym wypadku chcesz dodac tabele z nazwami miast, nalezy uzyc LEFT JOIN - patrz manual mysql.
brzanek
Ale ja nie chcę pobierać danych z dwóch baz naraz tylko chcę zastąpić liczby w city_id nazwami przypisanymi do nich.
city_id o nr. 1 odpowiada nazwie - Warszawa
city_id o nr. 36 to inaczej Szczecin
itd
Teraz jak zapisać to w php aby zamiast liczb były nazwy miast.
Jak zrobić aby pobierane city_id z bazy danych nie powielały się?
pasman
Cytat(brzanek @ 1.07.2015, 10:30:44 ) *
Ale ja nie chcę pobierać danych z dwóch baz naraz tylko chcę zastąpić liczby w city_id nazwami przypisanymi do nich.


chcesz wyświetlić nazwy miast ale nie chcesz ich pobierać z bazy ?
to skąd je weźmiesz ?
webmaniak
Cytat(brzanek @ 1.07.2015, 10:30:44 ) *
Ale ja nie chcę pobierać danych z dwóch baz naraz tylko chcę zastąpić liczby w city_id nazwami przypisanymi do nich.
city_id o nr. 1 odpowiada nazwie - Warszawa
city_id o nr. 36 to inaczej Szczecin
itd
Teraz jak zapisać to w php aby zamiast liczb były nazwy miast.

A masz w bazie danych w jakiejś tabeli że 1 to Warszawa, 36 to Szczecin? Jeśli tak to tak jak koledzy wyżej napisali musisz zrobić łączenie dwóch tabel. Jeśli nie to gdzie znajduje się to przypisanie miast do numerów?

Cytat(brzanek @ 1.07.2015, 10:30:44 ) *
Jak zrobić aby pobierane city_id z bazy danych nie powielały się?

http://www.w3schools.com/sql/sql_distinct.asp - to powinno pomóc.
Daimos
Domyślam się, że chcesz zmodyfikować bazę na stałe, jeśli tak, to zmodyfikuj typ pola, gdzie masz city_id na tekstowe i najprościej - pętla w PHP, czyli pobierasz wszystkie dane (razem z LEFT JOIN, jak napisał nospor), a później robisz update dla każdego rekordu. Jak chcesz to zrobić zapytaniem to manual -> REPLACE
brzanek
Dobra mam w drugiej tabeli nazwy miast przypisane do nr.


Teraz jak to połączyć aby wyświetlić najwyższe temperatury a do nich przypisane były miejscowości


Wcześniejsze wasze propozycje nic mi nie mówią aż tak dobrze to się nie znam na mysql.
nospor
Poraz kolejny - LEFT JOIN - pelen opis i przyklady masz w manualu mysql. Nawet osoba, ktora sie nie zna, nie jest zwolniona by do tego manuala łaskawie zajrzała...

https://dev.mysql.com/doc/refman/5.0/en/join.html
cala masa przykladow jak łączyc tabele i wyswietlac dane z obu
brzanek
Dodałem takie zapytanie
  1. "SELECT * FROM wea_history LEFT JOIN wea_city ON (wea_city.b=wea_history.a) ORDER BY wea_history.MaxTemperatureC DESC LIMIT 10"

Ale wyskakuje błąd
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /home/djdandi/ftp/2015/rekordy/index.php on line 13
Kod strony
  1. <?php
  2. //require_once "../maincore.php";
  3. //require_once THEMES."templates/header.php";
  4. // podłączamy plik connection.php
  5. require "connection.php";
  6. // wywołujemy funkcję connection()
  7. connection();
  8.  
  9.  
  10. $result = mysql_query(
  11. "SELECT * FROM wea_history LEFT JOIN wea_city ON (wea_city.b=wea_history.a) ORDER BY wea_history.MaxTemperatureC DESC LIMIT 10"
  12. );
  13. if(mysql_num_rows($result) > 0) {
  14. while($r = mysql_fetch_array($result)) {
  15. echo "<div>";
  16. echo "<div class='text'><p><span class='text1'> ".$r['station']."</span> ".$r['MaxTemperatureC']."</p></div>";
  17. echo "</div>";
  18. }
  19. }
  20. //require_once THEMES."templates/footer.php";
  21. ?>
prz3kus
co to jest a i b?

  1. wea_city.b=wea_history.a


Edit.
nospor jest beee usunoł mi śmieszny komentraz tongue.gif
brzanek
Dobra zrobiłem
  1. $query = "SELECT wea_history.MaxTemperatureC, wea_city_text.title ".
  2. "FROM wea_history LEFT JOIN wea_city_text ".
  3. "ON wea_history.city_id = wea_city_text.city_id ORDER BY wea_history.MaxTemperatureC DESC LIMIT 10";

Ale teraz jak wyświetlić aby nie powtarzały się miasta.
http://pogoda-zachodniopomorskie.pl/rekordy/index.php
prz3kus
pomiedzy select a from dodajes zpola jakie chcesz wyswietlic z danej tabelki, a zapytanie ponizej
  1. "SELECT wea_city.station,wea_history.MaxTemperatureC FROM wea_history LEFT JOIN wea_city ON (wea_city.id=wea_history.city_id) ORDER BY wea_history.MaxTemperatureC DESC LIMIT 10"




odp2.

Jak pogrupujesz a przy jednym miescie masz rozne tmp. to co wyswietlisz?
brzanek
Zależy mi na tym aby aby wyświetlić od najwyższej temperatury do najniższej z niepowtarzającymi się miejscowościami.
prz3kus
No to tak:

Minimalne TMP
  1. $query = "SELECT MIN(wea_history.MaxTemperatureC), wea_city_text.title ".
  2. "FROM wea_history LEFT JOIN wea_city_text ".
  3. "ON wea_history.city_id = wea_city_text.city_id GROUP BY wea_history.MaxTemperatureC, wea_city_text.title ORDER BY wea_history.MaxTemperatureC DESC LIMIT 10";


Maxymalne TMP
  1. $query = "SELECT MAX(wea_history.MaxTemperatureC), wea_city_text.title ".
  2. "FROM wea_history LEFT JOIN wea_city_text ".
  3. "ON wea_history.city_id = wea_city_text.city_id GROUP BY wea_history.MaxTemperatureC, wea_city_text.title ORDER BY wea_history.MaxTemperatureC DESC LIMIT 10";


Średnie TMP
  1. $query = "SELECT avg(wea_history.MaxTemperatureC), wea_city_text.title ".
  2. "FROM wea_history LEFT JOIN wea_city_text ".
  3. "ON wea_history.city_id = wea_city_text.city_id GROUP BY wea_history.MaxTemperatureC, wea_city_text.title ORDER BY wea_history.MaxTemperatureC DESC LIMIT 10";
brzanek
Prawie jest tak jak chciałem ale zobacz http://pogoda-zachodniopomorskie.pl/rekordy/index.php trzy razy występuje miejscowiść Dębno.
A swoją drogą jak pozbyć się tych krzaczków? W bazie danych wszystko wyświetla się poprawnie.
prz3kus
Moja wina wywal w grupowaniu tempertaure

Poprawione:
  1. $query = "SELECT MIN(wea_history.MaxTemperatureC), wea_city_text.title ".
  2. "FROM wea_history LEFT JOIN wea_city_text ".
  3. "ON wea_history.city_id = wea_city_text.city_id GROUP BY wea_city_text.title ORDER BY wea_history.MaxTemperatureC DESC LIMIT 10";





Co do polskich znaków czytaj tutaj:
http://www.php.pl/Wortal/Artykuly/Pomysly-...e-znaki-a-MySQL
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.