Maciej Szczepański

Maciej Szczepański www, marketing,
reklama

Temat: pobieranie danych z kilku tablic

witam,

mam 4 tablice ktore wygladaja identycznie:
ciagniki (id, nazwa, promo)
kombajny (id, nazwa, promo)
star_jelcz (id nazwa, promo)
zuk_lublin (id, nazwa, promo)

robie zapytanie aby losowo wybral wszystkie wpisy gdzie promo=1 a potem wyswietlil 3. napisalem cos takiego ale cos mi nie dziala

("SELECT * FROM ciagniki, kombajny, star_jelcz, zuk_lublin WHERE promo = '1' ODRER BY RAND() LIMIT 3");

ma kots pomysl jak to rozwiazać?

z góry dziekuje za pomoc
Maciek
Dawid A.

Dawid A.
https://pl.linkedin.
com/in/dawidandrzeje
wski

Temat: pobieranie danych z kilku tablic

SELECT id, name, promo FROM ciagniki WHERE promo = 1
UNION
SELECT id, name, promo FROM kombajny WHERE promo = 1
ORDER BY rand( )
LIMIT 3

Lepiej chyba jednak stworzyć tabelkę 'pojazdy' i dodać kolumnę typ
Robert B.

Robert B. Web Development
Manager

Temat: pobieranie danych z kilku tablic

Zdecydowanie zrobienie wspólnej tabeli ! Inaczej, przy większej liczbie produktów, baza po prostu padnie - rand() nie jest cachowane.

Temat: pobieranie danych z kilku tablic

Najlepiej jest zrobić tak, jak napisał Dawid. Jak dojdą kolejne typy, to będziesz dodawać kolejne tabele? Bez sensu.

Jeśli już chcesz pobrać dane w takiej strukturze, jaką masz, to Twoje zapytanie jest dobre, tylko musisz doprecyzować, co pobierasz (pewnie wyskakiwał Ci błąd: "ambiguous columns" lub coś w tym stylu).

Wywołaj takie zapytanie:


SELECT ciagniki.id, ciagniki.nazwa, ciagniki.promo, kombajny.id, kombajny.nazwa, kombajny.promo, star_jelcz.id, star_jelcz.nazwa, star_jelcz.promo, zuk_lublin.id, zuk_lublin.nazwa, zuk_lublin.promo FROM ciagniki, kombajny, star_jelcz, zuk_lublin WHERE (ciagniki.promo = '1' OR kombajny.promo = '1' OR star_jelcz.promo = '1' OR zuk_lublin.promo = '1') ODRER BY RAND() LIMIT 3
Tomasz Grabowski

Tomasz Grabowski szukam praktyki w C#

Temat: pobieranie danych z kilku tablic

pobiez dane za pomoca 3 zapytan do wspolnej tableli pozniej zlicz dlugosc tabli i za pomoca rand wyciagnij 3 argumenty.istnieje mozliwosc powtornego wylosowania tej samej warosci ale mozesz napisac kod uwzglegniajacy ta moliwosc
Maciej Szczepański

Maciej Szczepański www, marketing,
reklama

Temat: pobieranie danych z kilku tablic

Niestety ani UNION ani propzycja Piotra nie działają. Nie moge tego zrobic w jednej tabeli poniewaz do kazdej dojdzie tabeli jeszcze pole z indeksem do sortowania.

Kurcze a moze to jest problem z baza lub php?
wersja phpMy Admin - 2.6.0-pl2
mySql - 3.23.58
php5

konto usunięte

Temat: pobieranie danych z kilku tablic

Maciej Szczepański:
Niestety ani UNION ani propzycja Piotra nie działają. Nie moge tego zrobic w jednej tabeli poniewaz do kazdej dojdzie tabeli jeszcze pole z indeksem do sortowania.

masz z milion rekordów w tych tablichach :)

przy kilkuset rekordach to czy jest indeks czy go nie ma - nie ma większego znaczenia

a konstrukcji bazy tylko pozazdrościć ;)

no i masz bardzo starą bazę danych więc nie wszystkie sugestie mogą przejść u ciebie
Robert B.

Robert B. Web Development
Manager

Temat: pobieranie danych z kilku tablic

Maciej Szczepański:
Kurcze a moze to jest problem z baza lub php?
wersja phpMy Admin - 2.6.0-pl2
mySql - 3.23.58


MySQL 3 ?!?! no to baza ma chyba 10 lat.... wersja 5 jest już dostępna 2 - 3 lata
Maciej Szczepański

Maciej Szczepański www, marketing,
reklama

Temat: pobieranie danych z kilku tablic

Nic nie poradze, nie moj serwer.

Dzieki za wszytskie sugestie, chyba czeka mnie jeszcze troche dlubania, ale przynajmniej wiem w ktorym kierunku.
Michał Stachura

Michał Stachura Dedykowane serwisy i
strony www -
http://santri.eu

Temat: pobieranie danych z kilku tablic

Może tak zadziała
SELECT c.*, k.*, s.*, z.* 
FROM ciagniki AS c, kombajny AS k, star_jelcz AS s, zuk_lublin AS z
WHERE c.promo = 1 AND k.promo = 1 AND s.promo = 1 AND z.promo = 1
ORDER BY RAND()
LIMIT 3
Wojciech K.

Wojciech K. realizator pomysłów
własnych

Temat: pobieranie danych z kilku tablic

Maciej Szczepański:
Niestety ani UNION ani propzycja Piotra nie działają. Nie moge
sprobuj na początek bez ORDER BY - ten rand() mógł Ci nie zadziałać

w starym mySQLu musiałoby być tak:

select id,nazwa,rand() as losowa from ciagniki....
union
.....
order by losowa
tego zrobic w jednej tabeli poniewaz do kazdej dojdzie tabeli
jeszcze pole z indeksem do sortowania.

wspólna tabela to naprawdę rozsądne rozwiązanie - indeksy mają z tym niewiele wspólnego - zresztą przy takich prostych tabelach, indeks nic nie pomoże, jak już zwrócił uwagę Przemysław.

ps.
widzę, że 3/4 tematów na grupie PHP powinno się znaleźć na grupie o mySQL.

Następna dyskusja:

Pobieranie danych z ABCDATA




Wyślij zaproszenie do