Nerede fıkra içeride MySQL conditonal sorgusu

2 Cevap php

Ben gerçekten belirgin bir şey eksik ise emin değilim, ama bu sorgu bir sözdizimi hatası alıyorum. Ben belirgin bir şey eksik olsa bile, ben sonra kulüpler ne almanın akıllı bir yolu olup olmadığını bilmek istiyorum.

Temelde, sorgu Pazartesi ve Cuma günleri arasında bir start_date ile bir kullanıcıya bağlı herhangi bir satır sorar. Bu harika çalışıyor. Ama sonra Cumartesi ya da Pazar için herhangi bir satır vardır durumda koşullu sorgu ekledi. Koşullu sorgu Cumartesi veya Pazar, ana sorguda değil kullanıcı ile HERHANGİ kullanıcılar için kontrol unutmayın:

SELECT user_id,
DATE_FORMAT(DATE(shift_start),'%m/%d/%Y') date, 
TIME_FORMAT(TIME(shift_start), '%h:%i %p') start,
TIME_FORMAT(TIME(shift_end), '%h:%i %p') end,
title   
FROM shifts
WHERE user_id = '$user_id'
AND DATE(shift_start) BETWEEN
DATE_SUB(DATE(NOW()), INTERVAL WEEKDAY(NOW()) DAY) AND
DATE_ADD(DATE(NOW()), INTERVAL 
	(SELECT
	IF( 
	COUNT(*) FROM shifts
	WHERE DATE(shift_start) BETWEEN
	DATE_ADD(DATE(NOW()), INTERVAL 5 - WEEKDAY(NOW()) DAY) AND
	DATE_ADD(DATE(NOW()), INTERVAL 6 - WEEKDAY(NOW()) DAY),
6, 4)) - WEEKDAY(NOW()) DAY)
ORDER BY shift_start

Ben aslında IF parçası ile haberci önce nasıl çalıştığını oldukça gurur duyuyorum, ama bunu yapmanın bir besbelli daha iyi bir yolu olup olmadığını yine, ben bütün kulaklar değilim.

Bu ütülenir aldığında Oh, ve "Now ()" (GET yoluyla kendisine iletilen) php script kurmak bir tarih değişkeni ile değiştirilecektir.

Teşekkürler!


Harika iş, benlumey. İşte çalıştı budur:

SELECT user_id,
DATE_FORMAT(DATE(shift_start),'%m/%d/%Y') date, 
TIME_FORMAT(TIME(shift_start), '%h:%i %p') start,
TIME_FORMAT(TIME(shift_end), '%h:%i %p') end,
title   
FROM shifts
WHERE user_id = '$user_id'
AND DATE(shift_start) BETWEEN
DATE_SUB(DATE(NOW()), INTERVAL WEEKDAY(NOW()) DAY) AND
DATE_ADD(DATE(NOW()), INTERVAL 
	(SELECT
	IF(COUNT(*),6,4) 
	FROM shifts
	WHERE DATE(shift_start) BETWEEN
	DATE_ADD(DATE(NOW()), INTERVAL 5 - WEEKDAY(NOW()) DAY) AND
	DATE_ADD(DATE(NOW()), INTERVAL 6 - WEEKDAY(NOW()) DAY))
            - WEEKDAY(NOW()) DAY)
ORDER BY shift_start

2 Cevap

Bu alt sorgu deneyin:

(SELECT 
    IF(COUNT(*) > 0, 6, 4)) - WEEKDAY(NOW()) DAY) 
    FROM shifts 
    WHERE DATE(shift_start) BETWEEN
    DATE_ADD(DATE(NOW()), INTERVAL 5 - WEEKDAY(NOW()) DAY) AND
    DATE_ADD(DATE(NOW()), INTERVAL 6 - WEEKDAY(NOW()) DAY)

Yaptığım iki şey

  • normal bir sorgu gibi bakmak yaptı, gelen ve nerede içeri giremezsiniz eğer kadarıyla farkında değilim gibi.
  • Eğer bir koşul koymak, mysql otomatik olarak 0 olarak yanlış alacak sanmıyorum ve> 0 olarak gerçekleşiyor.

Bu buralarda ayrı düşüyor:

    (SELECT
    IF( 
       COUNT(*) FROM shifts
    WHERE DATE(shift_start) BETWEEN

Sayısı deyim çalışmaz.

Ne yapmaya çalışıyorsun? Sen burada gerçekleştirmek için çalışıyoruz ne net bir açıklama gerekiyor.

Bu da benim yağma olduğunu:

 (SELECT
    IF( 
      (select COUNT(*) FROM shifts
       WHERE DATE(shift_start) BETWEEN
       DATE_ADD(DATE(NOW()), INTERVAL 5 - WEEKDAY(NOW()) DAY) AND
       DATE_ADD(DATE(NOW()), INTERVAL 6 - WEEKDAY(NOW()) DAY))>0,6,4)
 ) - WEEKDAY(NOW()) DAY

Ama yapmak için çalışıyoruz bilmeden emin değilim.