Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php/mysql] Dwa selecty w jednym zapytaniu
M@X
post
Post #1





Grupa: Zarejestrowani
Postów: 212
Pomógł: 0
Dołączył: 18.12.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Witam.
Posiadam proste zapytanie:
  1. $query=mysql_query('SELECT * FROM tabela ORDER BY nazwa');
  2. while($row=mysql_fetch_array($query))
  3. {
  4. echo '
  5. <tr>
  6. <td>'.$row['nazwa'].'</td>
  7. <td>'.$row['data'].'</td>
  8. </tr>';
  9. }

Listuje ono dwie kolumny: nazwy i daty (data w bazie format datetime)

Chicałem dodać jeszcze jedną kolumne w której znajdzie się jakiś napis, jeśli datetime + 45 minut będzie większy niż NOW().
Tzn: jakaś nazwa ma swój datetime: powiedzmy 2013-10-03 20:00:00 to żeby napis pojawiał się, jeśli faktyczna godzina będzie powyżej 2013-10-03 20:45:00

Na samej zmiennej $row['data'] + INTERVAL 45 MIN >= NOW() tego raczej nie wykonam...
Wydaje mi się że to musi być jeszcze w zapytaniu, ale nie moge do tego SELECTA dodać bo zwykły $row['data'] nie będzie się wyświetlał.
LEFT JOIN i UNION też chyba odpadają bo nie ma dwóch tabel.

Ma ktoś jakiś pomysł jak to logicznie rozwiązać ?

Ten post edytował M@X 3.10.2013, 19:11:29
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
timon27
post
Post #2





Grupa: Zarejestrowani
Postów: 578
Pomógł: 69
Dołączył: 15.04.2007
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Cytat(M@X @ 3.10.2013, 19:47:58 ) *
Na samej zmiennej $row['data'] + INTERVAL 45 MIN >= NOW() tego raczej nie wykonam...


Czemu nie?
Tylko na samym mysql, bo po co php



  1. SELECT * FROM tabela WHERE ADDTIME(DATA, '0 0:45')>NOW() ORDER BY nazwa


//edit:
"data" powinno być małymi literami, nie wiem czemu forum zmienia mi na duże

Ten post edytował timon27 4.10.2013, 08:17:48
Go to the top of the page
+Quote Post
M@X
post
Post #3





Grupa: Zarejestrowani
Postów: 212
Pomógł: 0
Dołączył: 18.12.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Tak nie moze byc bo wtedy wyswietli tylko te wyniki ktore spelniaja warunek WHERE a musza byc wyswietlane wszystkie rekordy tylko jedna zmienna ma wyciagac date po zmiane.
Go to the top of the page
+Quote Post
freemp3
post
Post #4





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

Ostrzeżenie: (0%)
-----


Wystarczy użyć instrukcji warunkowych:
Kod
SELECT *, IF(date + INTERVAL 45 MINUTE >= NOW() , 1, 0) as pole FROM tabela ORDER BY nazwa

Jeśli wyrażenie jest prawdziwe zostanie zwrócona liczba 1, w przeciwnym wypadku 0.

Ten post edytował freemp3 4.10.2013, 09:12:19
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #5





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Kwestia jest prosta:

  1. SELECT *, CASE WHEN DATA + INTERVAL 45 MINUTE > NOW() THEN 'jakis teksts' ELSE 'inny tekst' END AS dodatkowa_kolumna::text FROM tabela ORDER BY nazwa
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 06:19