Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mySQL] zapytanie dotyczące 2 tabel
Forum PHP.pl > Forum > Przedszkole
Smirnoff


witam mam 2 tabele w bazie danych



obie wygladaja podobnie:

baza1:

id | rodzaj | opis

1 | a | jakis opis
2 | b | jakis opis2
3 | c | jakis opis3
4 | d | jakis opis4
itd...

baza2:

id | rodzaj | opis

1 | c | jakis opis
2 | b | jakis opis2
3 | a | jakis opis3
4 | d | jakis opis4
itd...


a i jakesze wkazdej tabeli jest kolumna czas i data dodania rekordu

do tej pory potrzebowalem funkcji kotra wybierała dane z jeden tabeli oto ona:

$aaa = mysql_query("SELECT * FROM baza1 ORDER BY czas DESC LIMIT 0,5") or die('Błąd zapytania');


a teraz potrzebuje funkcji ktora by tak samo zwrociła 5 najswiezszych rekordów ale sposrod wszysktich z bazy1 jak do tej pory i bazy2 tylko rodzaju "c' i 'd' i zupelnie nie mam pojecia jak to napisać....

dla obydwu to chyba byloby tak:

$aaa = mysql_query("SELECT * FROM baza1, baza2 ORDER BY czas DESC LIMIT 0,5") or die('Błąd zapytania');

ale jak zrobic zeby z bazy2 wybrało tylko kategorie c i d?
taro
WHERE baza2.rodzaj=c or baza2.rodzaj=d ? czarodziej.gif
Smirnoff
Panie czarodzieju, niestety nie działa


  1. <?php
  2.  
  3. $connection = @mysql_connect('localhost', 'xxx', 'xxx')
  4. or die('Brak polaczenia z serwerem MySQL');
  5. $db = @mysql_select_db('xxx', $connection)
  6. or die('Nie moge polaczyc sie z baza danych');
  7.  
  8.  
  9. $aaa = mysql_query("SELECT * FROM baza1 ORDER BY czas DESC LIMIT 0,5") or die('Błąd zapytania');
  10. echo "<table>";
  11. $i=1;
  12. while ($row = mysql_fetch_assoc($aaa)) {
  13. echo "<tr>";
  14. echo "<td>$i.</td><td><a href='download.php?id=$row[id]'>$row[opis]</a></td>";
  15. echo "</tr>";
  16.  
  17. $i++;
  18. }
  19.  
  20. echo "</table>";
  21.  
  22.  
  23. ?>


tak wyglada pełny skrypt, niestety w nim nawet jak wprowadze "SELECT * FROM baza1, baza2 ORDER BY..."
pojawia sie błąd zpaytania w miejscu w kotrym powinien dzialac skrypt. ktos wie może dlaczego? I czy tym sposobem mozna wyciagnac dane z 2 tabel?
neosatan
apostrofy!!

  1. SELECT * FROM `baza1` , `baza2` WHERE `baza2`.`rodzaj` = 'c' AND `baza2`.`rodzaj` = 'd' ORDER BY `id` DESC LIMIT 0, 5


mam wrażenie, że nie działa przez apostrofy, ponieważ gdy podajemy taki ciąg to wartości c i d zostana zinterpretowane jako zanki, a nie jako liczby. znaki i ciągi znakow należy podawać w normalnych apostrofach, a nazwy baz danych i tabel w tych takich kopnietych apostrofach.

PS. masz tak nawiasem mowiac kolumne czas w obu tabelach? jezeli, tak to musisz to bodajrze podac jako
  1. ORDER BY`baza1`.`czas`, `baza2`.`czas`
Jak nie masz tego w obu tabelach to zapytanie zwroci Ci blad.

btw. w tym die() to raczej sobie podaj funkcje mysql_error() ( die(mysql_error()) ) to bedziesz wiedzial chociaz co od Ciebie chce baza danych.
kefirek
  1. SELECT * FROM (
  2. SELECT * FROM baza1
  3. UNION ALL
  4. SELECT * FROM baza2
  5. ) AS tabela WHERE rodzaj='c' AND rodzaj='d' ORDER BY czas DESC LIMIT 5


Powinno działać
Tylko kolumny w obu tabelach muszą mieć te same nazwy.
neosatan
ale do pierwszej tabeli tez zastosuje kryterium... a autorowi chyba chodzilo o to, by do drugiej tabeli jedynie stosowalo kryterium...
kefirek
To wtedy można tak
  1. SELECT * FROM (
  2. SELECT * FROM baza1
  3. UNION ALL
  4. SELECT * FROM baza2 WHERE rodzaj='c' AND rodzaj='d'
  5. ) AS tabela ORDER BY czas DESC LIMIT 5
Smirnoff
Kefirek dzięki, ale niestety ani ni zaszkodziło ani nie pomogło...

postapiłem wg Twoich wskazówek w rezultacie nadal pokazuje mi tylko rekordy z baza1 i tyle je segreguje wg daty dodania
Chodzi tutaj o skrypt w rodzaju ostatnio dodane pliki. po dodaniu czegokolwiek do baza 1 pokazuje natomias po oddaniu do baza2 nie widzi tego. Obie bazy maja takie same pola, nie wiem dlaczego nie chce zastawic razem tych rekordów

PS. Pierwszy raz zetknąłem sie w mysql z "AS tabela " nie zmienialem tej wartosci, czy powinienem jej gdzies pozniej uzyc?


oto kod:

  1. <?php
  2.  
  3.  
  4. $connection = @mysql_connect('localhost', 'xxx', 'xxx')
  5. or die('Brak polaczenia z serwerem MySQL');
  6. $db = @mysql_select_db('rxxx', $connection)
  7. or die('Nie moge polaczyc sie z baza danych');
  8.  
  9.  
  10.  
  11.  
  12. $aaa = mysql_query("
  13.  
  14.  
  15. SELECT * FROM (
  16.  
  17. SELECT * FROM baza1
  18.  
  19. UNION ALL
  20.  
  21. SELECT * FROM baza2 WHERE rodzaj='c' AND rodzaj='d'
  22.  
  23. ) AS tabela ORDER BY czas DESC LIMIT 5"
  24.  
  25.  
  26.  
  27.  
  28.  
  29. ) or die('Błąd zapytania');
  30.  
  31.  
  32.  
  33.  
  34. echo "<table>";
  35. $i=1;
  36. while ($row = mysql_fetch_assoc($aaa)) {
  37. echo "<tr>";
  38. echo "<td>$i.</td><td><a href='download.php?id=$row[id]'>$row[opis]</a></td>";
  39. echo "</tr>";
  40.  
  41. $i++;
  42. }
  43.  
  44. echo "</table>";
  45.  
  46.  
  47.  
  48. ?>


wybaczcie ze podbijam temat, pojawiło sie duzo odp na inne tematy i moj zniknął a bardzo mi zalezy na rozwiazaniu tego problemu. Wie ktoś moze co jest nie tak w tym skrypcie?
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.